gpt4 book ai didi

linux - 在 bash 脚本中用多行文本替换模式

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:44:26 27 4
gpt4 key购买 nike

我有 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com