在 sed 命令中使用变量而不是值来替换文本文件中的单词

Use variables instead of values in sed commande to replace words in a text file

我必须编辑 /etc/fstab 来更改 /dev/shm 参数的安装选项。

源代码行是:

tmpfs                   /dev/shm                tmpfs   size=11g        0 0

我想将 noexec 添加到许多服务器的 /dev/shm 分区的第四个字段(安装选项)。(安装选项的大小不同) 所以我厌倦了这段代码: 获取安装选项的值。我用过:

shmvar=`grep -E '\s/dev/shm\s' /etc/fstab | awk '{ print  }'`

输出是:size=11g

sed -i -e '/shm/s/$shmvar/$shmvar,noexec/' /etc/fstab

sed -i -e '/shm/s/$shmvar/&,noexec/' /etc/fstab

但是 none 的 sed 命令有效。

当我使用“size=11g”而不是“$shmvar”时它起作用了:

 sed -i -e '/shm/s/size=11g/size=11g,noexec/' /etc/fstab
OR
sed -i -e '/shm/s/size=11g/&,noexec/' /etc/fstab

但是因为“size”的值在服务器上是不同的,所以我不得不使用变量

非常感谢您的快速帮助。谢谢

使用 GNU awk。如果第二个字段包含 /dev/shm,则将 ,noexec 附加到第四个字段。

awk -i inplace 'BEGIN{ OFS="\t" } =="/dev/shm"{ = ",noexec" } { print }' file

输出:

tmpfs   /dev/shm        tmpfs   size=11g,noexec 0       0