替换匹配两个条件的行上的单词

时间:2015-09-29 13:55:17

标签: linux sed

我正在尝试将defaults替换为defaults,nodev //home/opt/tmp/var

defaultsswap不应更改proc设置。

这是/etc/fstab文件:

/dev/rootvg/swap     swap                swap       defaults              0 0
/dev/rootvg/sysroot  /                   ext3       defaults              1 1
/dev/sda1            /boot               ext3       acl,user_xattr        1 2
/dev/rootvg/home     /home               ext3       defaults              1 2
/dev/rootvg/opt      /opt                ext3       defaults              1 2
/dev/rootvg/tmp      /tmp                ext3       defaults              1 2
/dev/rootvg/var      /var                ext3       defaults              1 2
proc                 /proc               proc       defaults              0 0
sysfs                /sys                sysfs      noauto                0 0
debugfs              /sys/kernel/debug   debugfs    noauto                0 0
devpts               /dev/pts            devpts     mode=0620,gid=5       0 0

3 个答案:

答案 0 :(得分:2)

我希望这个sed命令能对你有所帮助

sed '/proc\|swap/!s/defaults/&,nodev/' /etc/fstab

<强>输出:

/dev/rootvg/swap     swap                swap       defaults              0 0
/dev/rootvg/sysroot  /                   ext3       defaults,nodev              1 1
/dev/sda1            /boot               ext3       acl,user_xattr        1 2
/dev/rootvg/home     /home               ext3       defaults,nodev              1 2
/dev/rootvg/opt      /opt                ext3       defaults,nodev              1 2
/dev/rootvg/tmp      /tmp                ext3       defaults,nodev              1 2
/dev/rootvg/var      /var                ext3       defaults,nodev              1 2
proc                 /proc               proc       defaults              0 0
sysfs                /sys                sysfs      noauto                0 0
debugfs              /sys/kernel/debug   debugfs    noauto                0 0
devpts               /dev/pts            devpts     mode=0620,gid=5       0 0

注意: 如果您想要更改文件使用-i选项

答案 1 :(得分:1)

您可以使用{合并两个正则表达式地址:

/^\//{/swap/!s/defaults/defaults,nodev/}

更详细地说:

#!/bin/sed
/^\//{
/swap/!s/defaults/defaults,nodev/
}

因此,在以/开头的行上,如果该行不包含swap,则执行替换。

事实上,对于该特定文件,所有磁盘文件系统都是ext3,因此您可以简化为

/ext3/s/defaults/defaults,nodev/

答案 2 :(得分:0)

您似乎想要更改所有ext3文件系统的选项。那么你可以:

sed '/ext[2-4]/s/defaults/&,nodev/' file

使用此行,它将在ext2, 3, 4 FS上应用替换。您可以根据需要进行调整,例如: ext3仅适用于ext3。但是,由于使用了正则表达式,这可能并不总是能给你正确的结果。

如果你必须替换某个挂载点,我会使用awk检查列,我也不会使用正则表达式。