我正在使用 egrep -R
后跟一个包含大约 10 个联合的正则表达式,例如:.jpg | .png | .gif
等等。这很好用,现在我想用 .bmp
替换找到的所有字符串。
我在想类似的事情
egrep -lR "\.jpg|\.png|\.gif" . | sed "s/some_expression/.jpg/" file_it_came_form
所以这里的问题是我如何在
sed
中做一个类似的联合正则表达式以及如何告诉它保存对从中获取输入的文件的更改。
最佳答案
使用这个命令:
egrep -lRZ "\.jpg|\.png|\.gif" . \
| xargs -0 -l sed -i -e 's/\.jpg\|\.gif\|\.png/.bmp/g'
egrep
: 使用扩展正则表达式查找匹配行-l
: 只列出匹配的文件名 -R
: 递归搜索所有给定目录 -Z
:使用 \0
作为记录分隔符 "\.jpg|\.png|\.gif"
: 匹配字符串之一 ".jpg"
, ".gif"
或 ".png"
.
: 在当前目录中开始搜索 xargs
: 以标准输入为参数执行命令-0
:使用 \0
作为记录分隔符。这对于匹配 -Z
很重要的 egrep
并避免被输入文件名中的空格和换行符所迷惑。 -l
: 每个命令使用一行作为参数 sed
: s 流 编辑 迭代器-i
: 用输出替换输入文件而不做备份-e
: 使用以下参数作为表达式 's/\.jpg\|\.gif\|\.png/.bmp/g'
: 替换所有出现的字符串 ".jpg"
, ".gif"
或 ".png"
与 ".bmp"
关于regex - 使用 sed 和 grep/egrep 进行搜索和替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1169927/