SED:如何删除匹配包含正斜杠的模式行? [英] sed: How to delete lines matching a pattern that contains forward slashes?
问题描述
假设一个文件 / 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屋!