对于文件的每一行,grep一个特定的字符串并进行字符串替换

时间:2015-12-02 09:11:06

标签: linux bash shell

我有一个包含超过14000条记录的文件。 我想要做的是逐行处理这个文件,并用grep命令返回的anodher字符串替换一个String。 例如: 行:

/xxxxx/xxxxx/Class.java:67: Logger.w(TAG, "message");

我的grep命令获取 Class.java 字符串是(Class.java是juste的一个例子):

grep -o '[a-zA-Z]*"*\.java"*'

对于每一行,我必须用 class.java 字符串替换 TAG 字符串由grep命令返回

3 个答案:

答案 0 :(得分:1)

这是sed的用武之地:

sed -i 's/TAG/class.java/g' Class.java

对当前目录中的所有java文件执行此操作(假设此处为bash):

sed -i 's/TAG/class.java/g' *.java

-i表示就地,因此替换发生在文件中并立即保存。对于其他人,我建议你谷歌关于sed。

答案 1 :(得分:1)

您可以使用sed并执行以下操作:

sed -r 's#(.*)/(.*)\.java(.*)(TAG)#\1\/\2\3\2#g'

括号内的字符是 groups ,您可以在第二部分中使用它们来获取其内容。

为了就地修改文件,你应该:

sed -ir 's#(.*)/(.*)\.java(.*)(TAG)#\1\/\2\3\2#g' your_file.txt

答案 2 :(得分:0)

您可以使用:

grep -rl 'old_string' ./ | xargs sed -i 's/old_string/Relacement_String/g'