我有一个问题,我真的希望找到答案 这是一个有几行相同的文件,但我只是想在匹配后替换第一次出现。
我想在[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/'
我做错了什么?
答案 0 :(得分:4)
假设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
答案 1 :(得分:4)
awk 'f==1 && /Iam2/{$0="Iwas2";f=0}/blabla/{f=1}1' file
答案 2 :(得分:0)
这可能适合你(GNU sed):
sed '/\[blabla\]/,/Iam2/!b;/Iam2/!b;s//Iwas2/;:a;n;$!ba' file