SED:如何删除匹配包含正斜杠的模式行? [英] sed: How to delete lines matching a pattern that contains forward slashes?

查看:1524
本文介绍了SED:如何删除匹配包含正斜杠的模式行?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

假设一个文件 / etc / fstab文件包含以下内容:

Suppose a file /etc/fstab contains the following:

/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的替换命令时,模式包含 /

None of these worked. I tried changing the delimiters to ? and | because doing this works for the sed substitution command when a pattern contains /.

我在Debian GNU使用4.2.1的sed

I am using GNU Sed 4.2.1 on Debian.

推荐答案

您非常接近。当您使用非标准字符模式分隔符,如 |模式| ,第一次使用这个字符必须进行转义:

You were very close. When you use a nonstandard character for a pattern delimiter, such as |pattern|, the first use of that character must be escaped:

$ 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

类似地,可以使用:

Similarly, one can use:

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

最后,可以使用里面的 /模式/ 如果他们逃脱,你在你的答案显示的方式。

Lastly, it is possible to use slashes inside of /pattern/ if they are escaped in the way that you showed in your answer.

这篇关于SED:如何删除匹配包含正斜杠的模式行?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆