使用grep和sed替换字符串

时间:2013-12-26 08:41:22

标签: linux replace sed grep

我在目录中有大量文件, 我需要将文件中的行前缀改为“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!

感谢。

5 个答案:

答案 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