【发布时间】:2014-12-06 04:54:19
【问题描述】:
我有一个txt文件:
A
B
<anything>
C
D
我想用字符串替换文件中的 B 到 C,但这不匹配:
sed -i -e "s/B.*C/replace/g" $fileName
我找到了如何定位多行字符串:
awk '/B/,/C/' $fileName
【问题讨论】:
标签: regex bash shell sed scripting
我有一个txt文件:
A
B
<anything>
C
D
我想用字符串替换文件中的 B 到 C,但这不匹配:
sed -i -e "s/B.*C/replace/g" $fileName
我找到了如何定位多行字符串:
awk '/B/,/C/' $fileName
【问题讨论】:
标签: regex bash shell sed scripting
$ 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"
【讨论】:
这可能对你有用(GNU sed):
sed '/B/,/C/c\replacement' file
或:
var=replacement; sed '/B/,/C/c\'$var file
【讨论】: