Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 替换符合两个条件的行上的单词_Linux_Sed - Fatal编程技术网

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
也会更改。