我想在已知字符串和文件中不同行的未知十进制数字之间搜索模式。
假设我们必须搜索模式并替换为同一文件中的另一个模式:
实施例。文件包含以下内容:
###line 1..
###line 2..
###line 3..
known_string
###line 5
###line 6
4444
###line 8
###line 9
###line 10
unknown_string
###line 11
###line 12
6666
unknown_string
###line 15
###line 16
5555
EOF
在上面的例子中,我必须从文件中搜索一个模式。
known_string
###line 5
###line 6
4444
并且必须替换为同一文件中的另一个模式:
known_string
###line 5
###line 6
8850
因此,输出应采用以下格式:
###line 1..
###line 2..
###line 3..
known_string
###line 5
###line 6
8850
###line 8
###line 9
###line 10
unknown_string
###line 11
###line 12
6666
unknown_string
###line 15
###line 16
5555
EOF
我尝试过使用“sed”命令,
sed -i -e '/known_sting/{p:d;};N;N;N;c; 'known_string'N;'8850'' filename
但没有得到理想的结果。
感谢。
答案 0 :(得分:2)
awk
:
awk '/^[ \t]*known_string/{p=1} p && $0+0==$0{$0="8850"; p=0} 1' file
###line 1..
###line 2..
###line 3..
known_string
###line 5
###line 6
8850
###line 8
###line 9
###line 10
unknown_string
###line 11
###line 12
6666
unknown_string
###line 15
###line 16
5555
EOF
/^known_string/{p=1}
会在开始时找到known_string
时设置标记。$0+0==$0
检查是否确保当前行是有效号码。p=0
会重置旗帜。