我想用sed或perl替换multy line string

时间:2013-11-14 08:43:12

标签: perl sed

我想删除:

         ,
.rdt(rdt)

来自文字:

.colldisn(1'b0),
.rdt(rdt)

虽然.colldisn可能是各种文本。

所以,我有很多这个子字符串的文件,我想删除它。

4 个答案:

答案 0 :(得分:2)

sed -e ':a;N;$!ba;s/,\n.rdt(rdt)//g' tst.txt

如果您要提交tst.txt,要写入同一文件,请不要忘记添加-i选项。

:a;N;$!ba;将让你完成你想要的,巫师就是比较几行。

答案 1 :(得分:2)

这可能适合你(GNU sed):

sed '$!N;s/,\s*\n\s*\.rdt(rdt)//;P;D' file

如果您想保留空格和换行符:

sed '$!N;s/,\(\s*\n\s*\)\.rdt(rdt)/\1/;P;D' file

答案 2 :(得分:0)

在Perl中应该很容易:只需将前一行保留在变量中即可。如果遇到.rdt(rdt),请检查上一行是否以逗号结尾。如果是这样,打印前一行没有逗号,忘记当前行,否则打印整个前一行。不要忘记输出文件末尾的最后一行。

答案 3 :(得分:0)

的MyScript:

#!/usr/bin/perl -i.bak

undef $/;                   # get all the text
while(<>){ 
  s/,\n\.rdt\(rdt\)//g; 
  print;
}

“ - i.bak”更改了原始“文件”,但创建了“file.bak”副本。 这样你可以使用

myscript *.txt

更改当前目录中的所有txt文件 sed存在类似的开关。