Skip to content

Instantly share code, notes, and snippets.

@draplater
Created October 8, 2024 03:03
Show Gist options
  • Select an option

  • Save draplater/52d78d729e8385422479767a6b21a57e to your computer and use it in GitHub Desktop.

Select an option

Save draplater/52d78d729e8385422479767a6b21a57e to your computer and use it in GitHub Desktop.
▶(技术分享)◀ Mac和Linux上自动替换剪贴板内容的万能shell命令!

嘿嘿,今天偶又来分享一个超级实用滴小技巧!作为终端党的咱,有时候需要批量替换剪贴板中的内容,比如把 hello 替换为 world,你说手动一个字一个字改?我晕…… 咱拒绝!(敲键盘太累,心疼一下自己QAQ)

所以今天,偶就来教大家写一个适用于 macOSLinux 的超级万能 shell 函数,可以直接替换剪贴板的内容,并且带高亮显示哦~ 而且呢,这个函数自动检测系统,完美运行!各位小伙伴,一起来康康吧~


📜 代码讲解一下哈:

replace_clip() {
    # 参数校验
    if [ "$#" -ne 2 ]; then
        echo "Usage: replace_clip <from> <to>"
        return 1
    fi

    local from=$1
    local to=$2

    # 检测系统类型
    if [[ "$OSTYPE" == "darwin"* ]]; then
        # macOS
        local clipboard_text=$(pbpaste)
    elif [[ "$OSTYPE" == "linux-gnu"* ]]; then
        # Linux
        if command -v xclip &> /dev/null; then
            local clipboard_text=$(xclip -selection clipboard -o)
        elif command -v xsel &> /dev/null; then
            local clipboard_text=$(xsel --clipboard --output)
        else
            echo "Error: xclip or xsel is required on Linux to access the clipboard."
            return 1
        fi
    else
        echo "Unsupported OS: $OSTYPE"
        return 1
    fi

    # 替换剪贴板内容
    local replaced_text=$(echo "$clipboard_text" | sed "s/$from/$to/g")

    # 将替换后的内容放回剪贴板
    if [[ "$OSTYPE" == "darwin"* ]]; then
        # macOS
        echo "$replaced_text" | pbcopy
    elif [[ "$OSTYPE" == "linux-gnu"* ]]; then
        # Linux
        if command -v xclip &> /dev/null; then
            echo "$replaced_text" | xclip -selection clipboard
        elif command -v xsel &> /dev/null; then
            echo "$replaced_text" | xsel --clipboard --input
        fi
    fi

    # 打印出带有高亮的替换部分
    echo "$replaced_text" | sed "s/$to/$(printf '\033[1;31m')$to$(printf '\033[0m')/g"

    # 返回成功状态
    return 0
}

🧩 功能拆解:

  • 通用剪贴板操作:无论是 macOS 还是 Linux,都能自动识别并操作剪贴板!pbpastepbcopy 是 macOS 专用的,而 Linux 用 xclipxsel。如果你是 Linux 党,记得先安装这俩小工具哟~

    sudo apt-get install xclip
    # 或者
    sudo apt-get install xsel
  • 高亮显示:替换后的字符串可以自动在终端里高亮显示,默认是 红色,让你一眼就能看到哪里变了~(完美主义者的福音!)

  • 参数化设计:想换什么,就传什么。命令格式超级简单:

    replace_clip hello world

    这样一行命令,系统会自动把 hello 变成 world,并且高亮显示 world 哦!

💡 使用方法:

  1. Step 1:把函数代码复制到你的 ~/.bash_profile~/.zshrc 文件中,根据你使用的 shell 选择文件哟~

  2. Step 2:执行以下命令以加载你的新配置:

    source ~/.bash_profile  # 对bash用户
    source ~/.zshrc  # 对zsh用户
  3. Step 3:随时使用!只需要在终端中调用 replace_clip,然后传入你想替换的字符串,比如:

    replace_clip hello world
  4. 高亮结果展示:替换后的内容会以红色高亮显示出来,剪贴板中的内容也会被自动更新哦~


🌟 结语:

嘿嘿,咱写这个脚本真的超好用,适合咱这种懒得手动去替换剪贴板内容的小伙伴们。如果你也常常用剪贴板来处理一些工作流,这个小脚本真的是省时省力!赶紧收藏+点赞,学会了就不用手忙脚乱了哦,哈哈~

试试看吧,超级简单超好用!

如果有啥问题,评论里找偶讨论哈~ 祝大家终端玩的开心! 👾

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment