gpt4 book ai didi

linux - 如果存在另一行,则 Bash 替换行

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:02:09 25 4
gpt4 key购买 nike

我正在尝试编写一个 bash 脚本,它将逐行读取整个文件,查找特定行,如果该行存在 - 从中​​提取字符串到变量中并搜索另一个特定行并将其替换为该变量。它必须在 while 循环中,因为这对行可能会多次出现,因此我不想用 1 个变量替换所有行,因为每种情况都会有所不同,这是一个示例:

line1
mynumber: 666
line3
line4
show (value)
line5
line6
mynumber: 111
line7
line8
line9
line10
show (value)

所以我希望它在替换后看起来像这样:

line1
mynumber: 666
line3
line4
show (666,value)
line5
line6
mynumber: 111
line7
line8
line9
line10
show (111,value)

这是我损坏的代码,它失败了,因为正在获取变量但在另一个(数组)中添加了 1,我认为这破坏了 sed。

 for i in $(seq $count);
do while IFS= read -r line;
do var1="$(grep -o -E '.{0,0}mynumber: .{0,3}' File.cs | egrep -o ".{3}$")" ; done < "$input";
sed -i "s/(value)/(${var1},value)/g
" File.cs; ; done

我遇到的问题:Var= 666 111 我希望每次替换只有 1 个值我从 sed 中收到错误:sed -e 表达式 #1:未终止的 `s' 命令

最佳答案

AWK 可以单枪匹马地做到这一点。

$ awk '$1=="mynumber:"{c=$2} $1=="show"{sub(/\(/,"&"c",")}1' file
line1
mynumber: 666
line3
line4
show (666,value)
line5
line6
mynumber: 111
line7
line8
line9
line10
show (111,value)

关于linux - 如果存在另一行,则 Bash 替换行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58217679/

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