【问题标题】:Use variables instead of values in sed commande to replace words in a text file在 sed 命令中使用变量而不是值来替换文本文件中的单词
【发布时间】:2022-01-02 11:20:08
【问题描述】:

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

源代码是:

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

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

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

输出是:size=11g

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

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

但是 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

但是因为“大小”值在服务器中不同,所以我必须使用变量

非常感谢一些快速帮助。谢谢

【问题讨论】:

    标签: variables awk sed replace fstab


    【解决方案1】:

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

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

    输出:

    tmpfs /dev/shm tmpfs 大小=11g,noexec 0 0

    【讨论】:

    • 非常感谢,它可以工作有没有办法直接改变fstab文件?
    • 是的,我已经更新了答案。
    • 假设输入文件是制表符分隔的,因为您在输出中将其设置为制表符分隔,您可能应该将OFS="\t" 更改为FS=OFS="\t",因此如果任何一个都不会失败字段为空或包含空格,例如也许/dev/shm 可能是/dev/foo bar,idk。
    猜你喜欢
    • 2021-12-14
    • 2014-06-03
    • 2014-12-28
    • 2017-12-03
    • 2011-11-30
    • 2023-01-02
    • 2017-12-20
    • 2016-08-13
    • 2013-09-25
    相关资源
    最近更新 更多