这是我的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
答案 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'