【问题标题】:Removing a line from multiple files using grep & sed使用 grep 和 sed 从多个文件中删除一行
【发布时间】:2012-01-06 04:52:58
【问题描述】:

我在一个多级目录中有几个源代码文件,其中包含对函数的前向声明

extern "C" void myPrintf(char *fmt, ...);

我想从所有文件中删除此声明。 我可以做一个 grep 打印包含所有文件的声明的行,但不确定如何使用 sed 管道来获得所需的结果。

【问题讨论】:

    标签: shell sed grep


    【解决方案1】:

    使用 GNU sed

    sed -i '/extern "C" void myPrintf(char \*fmt, \.\.\.);/d' *.c
    

    如果您想递归执行此操作,您有两种选择:

    使用 Bash 4.X

    shopt -s globstar; sed -i '/extern "C" void myPrintf(char \*fmt, \.\.\.);/d' **.c
    

    带查找

    find /some/path -type f -name "*.c" -exec sed -i '/extern "C" void myPrintf(char \*fmt, \.\.\.);/d' {} \;
    

    【讨论】:

    • 谢谢。我只是在搜索标签中保留“void myPrintf”,以便在该语句中找到所有具有不同空格数的行
    【解决方案2】:

    使用awk:

    awk '/void myPrintf/{next}1' oldfile > newfile
    

    对于批量更新,你可以这样做 -

    find /path/to/files -type f -iname "*.c" | while read file; do
    awk '/void myPrintf/{next}1' "$file" > "$file".new
    mv "$file".new "$file"
    done
    

    【讨论】:

      猜你喜欢
      • 2015-08-07
      • 1970-01-01
      • 1970-01-01
      • 2011-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-09
      • 1970-01-01
      相关资源
      最近更新 更多