linux – 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.

解决方法

你很近对于模式分隔符(如| 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 /中的斜线,如果它们以您在答案中显示的方式进行转义.

相关文章

文章浏览阅读1.8k次,点赞63次,收藏54次。Linux下的目录权限...
文章浏览阅读1.6k次,点赞44次,收藏38次。关于Qt的安装、Wi...
本文介绍了使用shell脚本编写一个 Hello
文章浏览阅读1.5k次,点赞37次,收藏43次。【Linux】初识Lin...
文章浏览阅读3k次,点赞34次,收藏156次。Linux超详细笔记,...
文章浏览阅读6.8k次,点赞109次,收藏114次。【Linux】 Open...