如何正则表达式匹配周围的空格或行的开头/结尾

时间:2014-05-24 00:52:21

标签: regex shell grep

我试图在文件中找到包含/(斜杠)字符的行,该字符不是单词的一部分,如下所示:

grep "\</\>" file

但没有运气,即使文件中仅包含“/”,grep也找不到它。

我希望能够匹配

等行
some text / pictures
/ text
text /

,例如

/home

3 个答案:

答案 0 :(得分:4)

为什么您的方法不起作用

\<\>仅匹配的开头(或分别结束)。这意味着如果放在/附近(不被视为单词字符),它们永远匹配 - 因为例如\</基本上是说“匹配一个单词的开头直接跟一个字以外的东西(在这种情况下是'斜线')”,这是不可能的。

什么可行?

这将匹配由空格(/)或行的开头/结尾包围的\s

egrep '(^|\s)/($|\s)' file

egrep表示-E选项,它会启用扩展正则表达式的处理。)

可行的方法

如果/永远不会与非字字符(例如*#-和字母外的字符相邻,则以下稍微简单的表达式将起作用ASCII范围); OP的情况可能有限:

grep '\B/\B' file

答案 1 :(得分:2)

for str in  'some text / pictures' ' /home ' '/ text' ' text /'; do
  echo "$str" | egrep '(^|\s)/($|\s)'
done

这将匹配/

  • 如果整个输入字符串/
  • 如果输入字符串 /开头,后跟至少1个空格
  • 如果输入字符串 /结尾,并且前面至少有1个空格
  • 如果/ in

至于为什么grep "\</\>" file不起作用:

\</>匹配非词之间的左/右边界。但是, /不符合 的条件,因为字词被定义为来自集合[[:alnum:]_]的一个或多个字符实例的序列,即:至少长度为1的序列完全由字母数字_组成。

答案 2 :(得分:-3)

这似乎对我有用。

grep -rni " / \| /\|/ " .