我有 45 行代码需要 sed 命令。由于最近 GNU 的变化,我所有的脚本都被破坏了,需要 -std=legacy 和 -fallow-invalid-boz。我知道如何做到这一点的唯一方法是使用 sed。我不是计算机程序员,sed 简单易懂。
这些是我的 sed 命令示例。
有没有办法在循环中或使用 sed 本身执行所有这些 sed 命令。如果有另一个编辑器让它更容易,我也可以尝试学习。
我试过这个
for X in [24,28,32,36,40,45,49,53,56,60,64,68,69,73,74,79]
sed -i '$Xs/= /= -std=legacy -fallow-invalid-boz /g' $HOME/WRF/Downloads/NCEPlibs/macros.make.linux.gnu
done
但我得到了错误:$ for X in [24,28,32,36,40,45,49,53,56,60,64,68,69,73,74,79] sed -i '$Xs/= /= -std=legacy -fallow-invalid-boz /g' $HOME/WRF/Downloads/NCEPlibs/macros.make.linux.gnu done bash: syntax error near unexpected token
sed' bash: syntax error near unexpected token
done'
最佳答案
这样做更聪明
y="24 28 32 36 40 45 49 53 56 60 64 68 69 73 74 79"
for X in $y; do
sed -i "${X}s/= /= -std=legacy -fallow-invalid-boz /g" $HOME/WRF/Downloads/NCEPlibs/macros.make.linux.gnu
done
首先,你忘了做 中的声明为 所以 for 语句在执行之前就会失败。其次 [24,28,32,36,40,45,49,53,56,60,64,68,69,73,74,79] 无效为 为 使用换行符和/或空格来声明一个从左到右的新值。
最后但同样重要的是,使用 $X 在此示例中无效,因为 bash 将其读取为 $Xs/所以使用 ${X} 是正确的方法,当然使用 ""而不是使用 '' 所以 ${X} 实际上可以使用。
关于bash - 如何在sed中编辑多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72511416/