在bash正则表达式中^之后的管道是什么?

时间:2015-01-31 14:29:54

标签: regex grep

我有一个非常简单的bash命令序列:

echo "output 3:"
echo "abc shalom" >|F1
echo " abc shalom 4" >> F1
echo "abc shalom12" >> F1
echo "abc shalom123 shalom6" >> F1
echo "abcshalom22 456 shalom" >> F1
egrep "(^|[ ]*)[^ ]+[ ]+shalom($|..[ ])" F1

输出是:

abc shalom
abcshalom22 456 shalom

我无法理解这个简单的正则表达式如何工作,我理解管道是“或”,但我不明白我如何得到这两行......

有人可以一步一步地向我解释这个短正则表达式中发生了什么吗?

1 个答案:

答案 0 :(得分:1)

让我们看看:

egrep "(^|[ ]*)[^ ]+[ ]+shalom($|..[ ])" F1

|表示匹配任何一个或另一个。因此,aa|bb表示:匹配aabb

^|[ ]*你正在使用正则表达式匹配行的开头(由^表示)或零或多个空格的序列(由[ ]*表示)。< / p>