我想在我的脚本中传递此命令:
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
?先谢谢你们!这个社区太棒了!
答案 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