我有一个txt文件:
A
B
<anything>
C
D
我想用字符串替换文件中的B到C,但这不匹配:
sed -i -e "s/B.*C/replace/g" $fileName
我找到了如何使用以下方法定位多行字符串:
awk '/B/,/C/' $fileName
答案 0 :(得分:2)
$ awk '/B/{print "Replacement Text"} /B/,/C/{next} 1' "$fileName"
A
Replacement Text
D
awk
代码的说明:
/B/{print "Replacement Text"}
当我们看到B
行时,请打印出新文本,无论它是什么。
/B/,/C/{next}
B
和C
之间的任何行,请跳过其余命令并跳转到下一行。
1
这是打印当前行的awk
简写。
如果替换文本位于shell变量newtext
中,请使用:
awk -v new="$newtext" '/B/{print new} /B/,/C/{next} 1'
如果你有GNU awk
v4.1.0或更高版本:
$ awk -i inplace '/B/{print "Replacement Text"} /B/,/C/{next} 1' "$fileName"
使用早期版本:
awk '/B/{print "Replacement Text"} /B/,/C/{next} 1' "$filename" >tmp && mv tmp "$filename"
答案 1 :(得分:0)
这可能适合你(GNU sed):
sed '/B/,/C/c\replacement' file
或:
var=replacement; sed '/B/,/C/c\'$var file