如何通过sed传递特殊字符

时间:2013-11-29 00:14:54

标签: bash sed special-characters

我想在我的脚本中传递此命令:
sed -n -e "/Next</a></p>/,/Next</a></p>/ p" file.txt
这个命令(应该)提取两个匹配模式之间的所有文本,在我的情况下都是Next</a></p>。但是,当我运行我的脚本时,我不断收到错误。我试过了:
sed -n -e "/Next\<\/a\>\<\/p\>/,/Next<\/a\>\<\/p>/ p" file.txt没有运气。

我相信这个命令的通用模式是这样的:
sed -n -e "/pattern1/,/pattern2/ p" file.txt
我无法让它在Next</a></p>工作,我猜它与我所包围的特殊字符有关。有没有办法在Next</a></p>命令中传递sed?先谢谢你们!这个社区太棒了!

2 个答案:

答案 0 :(得分:2)

您不需要使用 / 作为正则表达式分隔符。使用不同的字符会使引用问题稍微容易一些。语法是

\cregexc

其中c可以是您在正则表达式中不使用的任何字符( \ 除外)。在这种情况下,可能是一个不错的选择:

sed -n -e '\:Next</a></p>:,\:Next</a></p>: p' file.txt

请注意,我将更改为',因为在双引号内, \ 将被bash解释为转义字符,而在单个内部引号 \ 只是被视为常规字符。因此,您可以编写带有转义斜杠的版本,如下所示:

sed -n -e '/Next<\/a><\/p>/,/Next<\/a><\/p>/ p' file.txt

但我认为带冒号的版本(稍微)更容易阅读。

答案 1 :(得分:0)

你需要使用\来转义正则表达式中的正斜杠,因为正斜杠用作正则表达式的分隔符

sed -n -e '/Next<\/a><\/p>/,/Next<\/a><\/p>/p' file.txt