惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

IT之家
IT之家
Last Week in AI
Last Week in AI
博客园_首页
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 叶小钗
大猫的无限游戏
大猫的无限游戏
人人都是产品经理
人人都是产品经理
V
Visual Studio Blog
宝玉的分享
宝玉的分享
博客园 - Franky
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
月光博客
月光博客
T
Tailwind CSS Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
量子位
博客园 - 聂微东
S
SegmentFault 最新的问题
博客园 - 司徒正美
罗磊的独立博客
V
V2EX
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
美团技术团队
小众软件
小众软件
Jina AI
Jina AI

Dvel's Blog

Rime 全拼双拼混输 CHD 油猴脚本:每日签到自动答题 Rime 配置:雾凇拼音 Hammerspoon 自动切换输入法 修复 Hugo 本地图片的累计布局偏移(CLS)问题 macOS 利用 Karabiner 修改 Emacs 键位为 Vim 键位 macOS 修改 Emacs 键位为 Vim 键位 Surge 配置 汉字的混乱 Netflix 中英双语字幕的好办法 优化 Rime 英文输入体验 判断字符是否为简体字或繁体字 Cloudflare 转入域名提示「出现了问题。请重试转移此域。尚未向您收费。」 图片压缩:Squoosh、TinyPNG、ImageOptim、WebP 在 macOS 根目录创建文件夹 博客图床小妙招 折腾 Hugo & PaperMod 主题 利用 Cloudflare Workers 进行批量 301 重定向 将博客部署在 Cloudflare Pages Alfred File Navigation(文件导航器)详解 在 Hugo Goldmark Markdown 中设置以新标签打开链接 日期与时间(UTC、GMT、时间戳、时区) 让 Alfred 以新标签的方式打开 Finder 用 git filter-branch 给 Git 仓库瘦身 qBittorrent 设置教程 联通光猫破解+桥接记录 配置 Mac 终端走代理 Steam for Mac 中文游戏推荐 我的 Mac 软件/工具列表 《Flask Web 开发》笔记
macOS grep + sed 批量替换多个文件的内容
Dvel · 2022-01-14 · via Dvel's Blog

偶尔的替换用 VSCode 或 JetBrains IDE 的类似 Cmd + Shift + H 的文件替换就可以了。

经常或快捷的使用,可以用 grep + sed 命令进行替换。

搜索试了几个命令,发现有空格的路径会导致一些错误。

一顿搜索,找到了一个解决办法,参考 Grep word within a file then copy the file

  • --null 告诉 grep 以 NUL 字符分割文件名
  • -0 告诉 sed 以 NUL 分割输入

最终命令示例,以 bar 替换 foo

区分大小写:

$ grep -lr --null 'foo' * | xargs -0 sed -i '' 's/foo/bar/g'

不区分大小写:

$ grep -ilr --null 'foo' * | xargs -0 sed -i '' 's/foo/bar/gI'

  • grep
    • -i, --ignore-case 查找文件时不区分大小写
    • -l, --files-with-matches 返回文件名
    • -R, -r, --recursive 递归搜索子目录
  • sed
    • -i 默认 sed 会打印到标准输出,使用 -i 将直接在文件内编辑替换
    • s 替换
    • g 全局替换标志
    • I 大小写不敏感标志

示例。

替换需求:

- ![](/img/xxx.webp)
+ ![](https://example.com/img/xxx.webp)

可能有需要转义的:

查找的字符串、替换的内容:
](/img
](https://example.com/img

转义后:
](\/img
https:\/\/example.com\/img

将转义后的内容代入就可以了,完整的:

$ grep -lr --null '](\/img' | xargs -0 sed -i '' 's/](\/img/](https:\/\/example.com\/img/g'