在UNIX中搜索和替换

时间:2011-06-05 18:52:43

标签: perl shell unix sed replace

如何替换文件中的字符串,使得要替换的字符串总是被某个字符串替换。

例如:如果我想用123替换ABC,

INPUT

ABC
ABCXYZ
ABCDHD
ABC
CDE

输出

ABC
123XYZ
123DHD
ABC
CDE

我尝试使用sed但没有成功。

5 个答案:

答案 0 :(得分:6)

没有使用预测捕获:

s/ABC(?=\S)/123/;

答案 1 :(得分:2)

sed -i 's/ABC\(.+\)$/123\1/g' myFile.txt

ABC,匹配文字ABC!

\(.+\)匹配至少1个其他角色在第1组中捕获它

123\1用123替换洞穴事物,然后用第1组中捕获的内容替换

答案 2 :(得分:2)

perl -pi.bak -e 's/^ABC(.+)$/123$1/g' file.txt

然而,这也将取代空白。如果您不希望这样,那么您可以使用.+而不是\S+

-i.bak选项会在file.txt中保存file.txt.bak的备份,以防您更换了替换内容。

答案 3 :(得分:1)

这个对我有用:

$ sed   -r  s/ABC\(.+\)/123\\1/g <file>
ABC
123XYZ
123DHD
ABC
CDE

答案 4 :(得分:0)

对于没有人使用过\B感到惊讶。

#!/usr/bin/perl

use strict;
use warnings;

while (<DATA>) {
  s/ABC\B/123/;
  print;
}

__DATA__
ABC
ABCXYZ
ABCDHD
ABC
CDE