从行尾搜索到下一行

时间:2012-08-08 14:48:47

标签: regex vim grep special-characters end-of-line

我在使用gvim和grep的Unix上。

问题1:

我需要在xml文件中搜索以下模式:

< sample1>
< /sample1>

所以问题是图案越过一条线。我是gvim和grep的新手,并且可以使用我的正则表达式/特殊字符知识来解决这个问题。

问题2:

另一个问题是,在第二行中的小于号(&lt;)之前存在空格。即

< sample1>
 < /sample1>

有人可以建议我如何搜索这些模式吗?

4 个答案:

答案 0 :(得分:3)

要在Vim中搜索此模式,请在正常模式下使用/命令:

/< sample>\n< \/sample1>

请注意,必须使用/字符转义第二行的\字符。

答案 1 :(得分:2)

使用sed的一种方式:

sed -n '/< sample1>/,/< \/sample1>/p' file.txt

修改

如果您想排除分隔符:

sed -n '/< sample1>/,/< \/sample1>/ {//!p}' file.txt

答案 2 :(得分:0)

您只需键入命令模式即可搜索< /sample1>模式:

/< \/sample1>

我不明白第二个问题,因为如果有空白区域并不重要。在搜索斜杠后面放一个空格:

/ < \/sample1>

我刚刚在Vim中对此进行了测试,但它确实有效。希望对你有用。

干杯。

答案 3 :(得分:0)

VIM

您可以在搜索模式中的ViM中使用\n

问题1:

/<\ sample1>\n<\ \/sample1>

问题2:

/<\ sample1>\n\ <\ \/sample1>

如果你想更精确并忽略这样的情况:

blah blah < sample1>
 < /sample1> blah blah

您可以明确要求匹配行的开头和结尾:

问题2:

/^<\ sample1>\n\ <\ \/sample1>$

如果代码前的空白区域不重要,您可以使用\s*

/^\s*<\ sample1>\n\s*<\ \/sample1>$

的grep

如果你对使用grep感兴趣,我有个坏消息。 grep不会做多行。但是,您可以查看this question并了解pcregrep -M可以解决您的问题。