我在目录中有大量文件, 我需要将文件中的行前缀改为“AB_”到“YZ_” 我怎么能这样做?
我使用了grep和sed之类的,
grep -nr "AB_" ./ | xargs -0 sed -i 's/AB_/YZ_/g'
但是给出错误,
: File name too long
文件中的示例字符串为:Hello AB_WORLD!
和Hello WORLD_AB!
感谢。
答案 0 :(得分:0)
您的意思是grep -lr
而非grep -nr
-l
为您提供文件名; -n
为您提供前缀为
答案 1 :(得分:0)
我喜欢这个Perl:
-i选项将使用.bak扩展名保存原始文件。
$ perl -i.bak -pe 's/^AB_/YZ_/' *.txt
答案 2 :(得分:0)
grep -lr "AB_" ./ | while read file
do
echo "Change file $file ..."
sed -i 's/AB_/YZ_/g' ${file}
done
答案 3 :(得分:0)
sed会将多个文件作为参数,因此这应该有效:
sed -i '/AB_/s//YZ_/g' *
(注意-i
是非标准的)
答案 4 :(得分:0)
sed one-liner答案
在包含字符串“foo”的目录中查找php文件,并用“bar”替换所有出现的文件
grep -l foo * .php | xargs sed -i's / foo / bar / g
通过目录递归
grep -rl foo * | xargs sed -i's / foo / bar / g
(刚刚在8100文件上成功完成)
grep -rl bar * | wc -l 8102