我试图在文件中找到包含/
(斜杠)字符的行,该字符不是单词的一部分,如下所示:
grep "\</\>" file
但没有运气,即使文件中仅包含“/”,grep
也找不到它。
我希望能够匹配
等行some text / pictures
/ text
text /
但不,例如
/home
答案 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 " / \| /\|/ " .