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

 peteryan 发布于 2022-12-29 17:02

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

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/如果它们以您在答案中显示的方式进行转义,则可以在其中使用斜杠.

    2022-12-29 17:05 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有