我有一个我真的希望找到答案的问题。
这些是几行相同的文件,但是我只想替换匹配后的第一个匹配项。
我想在[blabla]行之后将第一个Iam2更改为Iwas2。
file.txt:
Iam
Iam1
Iam2
Iam21
[blabla]
Iam3
Iam2
Iam3
Iam2
我试过了:
$ cat file.txt | sed '1,/[blabla]/a \' | sed '0,/Iam2/s//Iwas2/'
并且
$ cat file.txt | sed '/[blabla]/a \' | sed '0,/Iam2/s//Iwas3/'
我究竟做错了什么?
最佳答案
假定问题的数据为infile
的一种方法:
sed -e '
## From "[blabla]" until last line try to substitute "Iam2". If the
## substitution succeeds go to label "a".
/\[blabla\]/,$ {
s/Iam\(2\)/Iwas\1/;
ta
}
## The substitution didn't succeed, so begin next cycle.
b
## Label "a".
:a
## Substitution succeed, so I don't want to repeat previous process. Now
## read each line and print it without modification until end of file.
N;
P;
s/^[^\n]*\n//;
ba
' infile
产生:
Iam
Iam1
Iam2
Iam21
[blabla]
Iam3
Iwas2
Iam3
Iam2