我有 bash 变量:
VAR="This is \n what i want"
和文件包含以下内容:
asdf
zxcv
qwer
我想用 $VAR 的值(多行文本)替换每次出现的 zxcv
如何用 awk 或 sed 做到这一点? 我试过:
sed -i 's/zxcv/'$VAR'/g' filename
sed -i "s/zxcv/$VAR/g" filename
sed -i "s/zxcv/$(VAR)/g" filename
sed -i "s/zxcv/$(($VAR))/g" filename
sed -i "s/zxcv/`echo -n $VAR`/g" filename
最佳答案
使用 gnu-awk
,您可以通过在命令行上传递变量值来做到这一点:
var=$'This is \n what i want'
awk -v var="$var" -v w='zxcv' 'n=index($0, w){
$0 = substr($0, 1, n-1) var substr($0, n + length(w))} 1' file
asdf
This is
what i want
qwer
如果搜索词出现在单独的一行中(如问题所示),则此命令可以简化为:
awk -v var="$var" -v w='zxcv' 'index($0, w)==1{$0 = var} 1' file
关于linux - 在 bash 脚本中用多行文本替换模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50491023/