Bash 带空格的列表上的while循环
我正在尝试运行一个for循环,它将替换作为列表传递的文件中的字符串 例如:Bash 带空格的列表上的while循环,bash,shell,while-loop,grep,Bash,Shell,While Loop,Grep,我正在尝试运行一个for循环,它将替换作为列表传递的文件中的字符串 例如: Filename1 Filename2 File name3 File name4 我目前的代码是: for i in `grep -Rl 'OLD' *`; do > perl -p
Filename1
Filename2
File name3
File name4
我目前的代码是:
for i in `grep -Rl 'OLD' *`; do
> perl -pe 's/OLD/NEW/g' -pi "$i"
> done
Can't open File: No such file or directory.
Can't open name3: No such file or directory.
Can't open File: No such file or directory.
Can't open name3: No such file or directory.
Can't open File: No such file or directory.
Can't open name4: No such file or directory.
谢谢 为了避免分词,您可以说:
grep -Rl 'OLD' * | while read i; do
perl -pe 's/OLD/NEW/g' -pi "$i";
done
或
阅读时;做
perl-pe's/OLD/NEW/g'-pi“$i”;
完成<尝试使用xargs
和sed
grep -Rl 'OLD' * -Z | xargs -0 sed -i 's/OLD/NEW/g'
注意使用grep
的-Z
选项以null终止输出,与xargs-0
兼容。这将克服文件名中的空白问题。您也可以使用“查找”来完成此操作:
find -name 'File*' -exec sed -i 's,OLD,NEW,g' {} \;
这将与包含换行符的文件名有关。(但谁在文件名中加了换行符?就是那些在文件名中加空格的人!)
find -name 'File*' -exec sed -i 's,OLD,NEW,g' {} \;