我想使用sed删除此行的所有出现当且仅当这是
时<ab></ab>
如果这行,我不想删除它
<ab>keyword</ab>
我的尝试无效:
sed '/<ab></ab>/d'
感谢您的任何见解。 我不确定是什么错,因为我不应该逃避任何事情?
我使用名为temp的shell脚本来执行此操作。我的命令是:
cat foobar.html | ./temp
这是我的临时shell脚本:
#!/bin/sh
sed -e '/td/!d' | sed '/<ab></ab>/d'
答案 0 :(得分:2)
看起来我们在这里遇到了一些问题。第一个是关闭标记中的/
。 sed
使用它来分隔命令的不同部分。幸运的是,我们所要做的就是用\
来逃避它。尝试:
sed '/<ab><\/ab>/d'
这是我机器上的一个例子:
$ cat test
<ab></ab>
<ab></ab>
<ab>test</ab>
$ sed '/<ab><\/ab>/d' test
<ab>test</ab>
$
另一个问题是,我不确定sed -e '/td/!d'
的目的是什么。在它的默认操作模式下,您不需要告诉它不删除某些内容;只是告诉它你要删除的内容。
所以,要在名为input.html
的文件上执行此操作:
sed '/<ab><\/ab>/d' input.html
或者,要就地编辑文件,您可以这样做:
sed -i -e '/<ab><\/ab>/d' input.html
此外,sed
允许您使用任何想要的字符作为分隔符;你不必使用/
。因此,如果您不想逃避输入,可以这样做:
sed '\@<ab></ab>@d' input.html
修改强>
在评论中,您提到要删除仅包含</ab>
的行,而不删除其他内容。为此,您需要执行名为锚定匹配的内容。 ^
字符表示锚定行的开头,$
表示行的结尾。
sed '/^<\/ab>$/d' input.html
这只会匹配包含(字面意思)</ab>
的行而不包含任何其他行,并删除该行。如果您想匹配包含空格的行,但没有</ab>
以外的文字:
sed '/^[[:blank:]]*<\/ab>[[:blank:]]*$/d' input.html
[[:blank:]]*
匹配&#34; 0或更多空白字符&#34;并被称为&#34; POSIX括号表达&#34;。