我有这个myfile的行:
dog
snake
dog
cat
dog
snake
python
cat
dog
cat
dog
这将取代所有与狮子的狗 sed -i's / dog / lion / g'
但是我想在文件中遇到第一个“cat”之后才进行替换
dog
snake
dog
cat
lion
snake
python
cat
lion
cat
lion
我该怎么做? 请注意,我不知道第一个“猫”在哪一行的先验。我必须找到第一只猫,然后从那里申请sed
答案 0 :(得分:4)
答案 1 :(得分:0)
将sed
解决方案翻译为awk
$ awk '/cat/,0{sub("dog","lion")}1' file
说明:
从cat到文件末尾的 /cat/,0
sub("dog","lion")
用狮子替换狗
1
打印
答案 2 :(得分:0)
仅当前一行为lion
时,处理dog
代替cat
的附加选项是:
sed "/cat/{N;s/dog/lion/;}"
例如,将您的数据文件另存为file.txt
:
$ sed "/cat/{N;s/dog/lion/;}" file.txt
dog
snake
dog
cat
lion
snake
python
cat
lion
cat
lion