sed:如何删除与包含正斜杠的模式匹配的行?

多纳泰罗:

假设文件/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

我想删除以开头的行/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: `|'

这些都不起作用。我尝试将定界符更改为?和,|因为当模式包含时,此操作适用于sed替换命令/

我在Debian上使用GNU Sed 4.2.1。

约翰1024:

你很亲近 当您将非标准字符用作模式定界符(例如)时|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

同样,可以使用:

sed '\?^/dev/xvdb?d' /etc/fstab

最后,/pattern/如果斜杠以您在答案中显示的方式转义,则可以在其中使用斜杠

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章