假设文件/etc/fstab包含以下内容:
/dev/xvda1 / ext4 defaults 1 1
/dev/md0 /mnt/ibsraid xfs defaults,noatime 0 2
/mnt/ibsraid/varlog /var/log none bind 0 0
/dev/xvdb None auto defaults,nobootwait 0 2
Run Code Online (Sandbox Code Playgroud)
我想删除以/dev/xvdb.开头的行.所以我尝试过:
$ sed '/^/dev/xvdb/d' /etc/fstab
sed: -e expression #1, char 5: extra characters after command
$ sed '?^/dev/xvdb?d' /etc/fstab
sed: -e expression #1, char 1: unknown command: `?'
$ sed '|^/dev/xvdb|d' /etc/fstab
sed: -e expression #1, char 1: unknown command: `|'
Run Code Online (Sandbox Code Playgroud)
这些都没有奏效.我尝试将分隔符更改为?,|因为当模式包含时,这样做适用于sed替换命令/.
我在Debian上使用GNU Sed 4.2.1.
Joh*_*024 29
你非常接近.对模式分隔符使用非标准字符时,例如|pattern|,必须首先使用该字符进行转义:
$ sed '\|^/dev/xvdb|d' /etc/fstab
/dev/xvda1 / ext4 defaults 1 1
/dev/md0 /mnt/ibsraid xfs defaults,noatime 0 2
/mnt/ibsraid/varlog /var/log none bind 0 0
Run Code Online (Sandbox Code Playgroud)
同样,人们可以使用:
sed '\?^/dev/xvdb?d' /etc/fstab
Run Code Online (Sandbox Code Playgroud)
最后,/pattern/如果它们以您在答案中显示的方式进行转义,则可以在其中使用斜杠.
经过一番挖掘,我发现可以/使用 来转义模式字符串中的\。所以这有效:
$ sed '/^\/dev\/xvdb/d' /etc/fstab
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17518 次 |
| 最近记录: |