Linux 替换符合两个条件的行上的单词
我试图用Linux 替换符合两个条件的行上的单词,linux,sed,Linux,Sed,我试图用默认值替换默认值,nodev用于/,/home,/opt,/tmp,/var 但是,对于swap和proc,不应更改默认设置 这是/etc/fstab文件: /dev/rootvg/swap swap swap defaults 0 0 /dev/rootvg/sysroot / ext3 defaults 1 1 /dev/sda1
默认值替换默认值,nodev
用于/
,/home
,/opt
,/tmp
,/var
但是,对于swap
和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
您可以使用{
组合两个正则表达式地址:
/^\//{/swap/!s/defaults/defaults,nodev/}
更详细地说:
#!/bin/sed
/^\//{
/swap/!s/defaults/defaults,nodev/
}
因此,对于以/
开头的行,如果该行不包含swap
,则进行替换
事实上,对于这个特定的文件,所有的磁盘文件系统都是ext3,因此您可以简化为
/ext3/s/defaults/defaults,nodev/
我希望这个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
选项似乎要更改所有ext3
文件系统的选项。然后可以:
sed '/ext[2-4]/s/defaults/&,nodev/' file
有了这一行,它将在ext2,3,4
FS上应用替换。您可以根据需要对其进行调整,例如ext3
仅适用于ext3。但由于使用了regex,因此这可能并不总是给出正确的结果
如果您必须替换某些装入点,我将使用awk检查列,而我也不会使用regex。/var
也会更改。