用sed grep管

时间:2010-12-23 10:01:36

标签: bash sed grep

这是我的bash命令

grep -rl "System.out.print" Project1/ | 
    xargs -I{} grep -H -n "System.out.print" {} |
    cut -f-2 -d: |
    sed "s/\(.*\):\(.*\)/filename is \1 and line number is \2/

我在这里尝试做的是,我正在尝试遍历子文件夹并检查哪些文件包含“System.out.print”(使用grep) 使用第二个grep尝试获取文件名和行号 使用sed命令我将它们显示给控制台。 从这里我想删除“System.out.print”与“XXXXX”如何管道sed命令到这个? 请帮助我 thanxx

2 个答案:

答案 0 :(得分:10)

GNU sed可以选择更改文件:

find Project1/ -type f | xargs sed -i 's/System\.out\.print/XXXXX/g'

顺便说一句,您的脚本可以写成:

grep -rsn 'root' /etc/ |
    awk -F: '{ print "filename is", $1, "and line number is", $2 }'

答案 1 :(得分:0)

我只是建立在hop的答案上,我发现它比find -exec更有用。我的 search_text 分散在我的计算机,日志,配置文件等中,但我不想搜索(或特别更改)/ dev,/ sys,/ proc和等等。一个注意事项,阅读man xargs;它不喜欢带空格的文件名。

grep -HriIl --exclude-dir=dev --exclude-dir=proc --exclude-dir=sys search_text / | xargs sed -i 's/search_text/replace_text/g'