bash - 如何在sed中编辑多行

标签 bash loops ubuntu sed gnu

我有 45 行代码需要 sed 命令。由于最近 GNU 的变化,我所有的脚本都被破坏了,需要 -std=legacy 和 -fallow-invalid-boz。我知道如何做到这一点的唯一方法是使用 sed。我不是计算机程序员,sed 简单易懂。
这些是我的 sed 命令示例。
enter image description here
有没有办法在循环中或使用 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/

相关文章:

bash - 如何更改 shell/bash 脚本中的 argv[0] 值?

python - 在Python中,应该如何测试环境变量中指定的路径中是否存在文件?

mysql - 检查mysql数据库是否存在,根据结果执行操作

Javascript 计时/循环问题?

python mechanize - 可以登录网站,但无法获取 html 的 URL 列表?

linux - 通过 ssh 执行的管道命令的退出状态

java - 我如何从第 10 行读取(例如)代码的第 5 行?

ubuntu - debconf 警告尽管 DEBIAN_FRONTEND 在 Docker 镜像中

linux - 在 Linux 中将日期 append 到文件名

python - 无法在 opencv3.2(ubuntu,python3)中读取 mp4