regex - 使用 sed 和 grep/egrep 进行搜索和替换

标签 regex sed grep

我正在使用 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/

    相关文章:

    sed - 在模式上方添加回车两行

    linux - shell脚本: convert raw output (from dict lines into csv)

    bash - 使用 unix awk/sed/grep 从文本文件中删除完整的 url

    python - 什么正则表达式匹配这种类型的时间戳

    regex - 从字符串中提取键值

    regex - sed 将线条连接在一起

    c++ - 如何提取for循环体?

    python - Popen 管道 2 cmd 挂起并且没有给出预期的结果

    java regEx,真的很困惑

    java - Java 中的 Sip URI 验证