我对此进行了很多研究,但仍然不清楚。什么是字边界意思是?它有什么作用?
例如,有人可以向我解释一下这个命令吗?
egrep '\b[A-Z]+\b' filename.sh
答案1
如上所述这里,例如,它匹配之间字:
三种不同的位置都可以作为单词边界:
- 如果第一个字符是单词字符,则在字符串中的第一个字符之前。
- 在字符串中的最后一个字符之后,如果最后一个字符是单词字符。
- 字符串中的两个字符之间,其中一个是单词字符,另一个不是单词字符。
以下是每种情况的示例:
对于字符串
foobar
,第一种情况匹配foobar ^-----here
对于字符串
foobar
,第二种情况匹配foobar ^--here
对于字符串
foo bar
,第三种情况将匹配foo bar ^--here, because space is not a word character
什么符合单词字符取决于特定的正则表达式实现。但在所有情况下,字母 ([a-z]
和[A-Z]
)、数字 ( [0-9]
) 和 都_
被视为单词字符。
因此,您发布的示例正则表达式 ( \b[A-Z]+\b
) 意味着找到两个单词边界之间且仅包含大写字母的最长字符串。通过例子可能更容易解释:
echo "FOOBAR" | egrep '\b[A-Z]+\b' # Works
echo "FOO BAR" | egrep '\b[A-Z]+\b' # Works
echo "aFOOBARb" | egrep '\b[A-Z]+\b' # Does not work, we want capitals only
echo "12345" | egrep '\b[A-Za]+\b' # Does not work, no letters
echo "1FOOBAR2" | egrep '\b[A-Z]+\b' # Does not work, 1 and 2 are word chars
echo "_FOOBAR_" | egrep '\b[A-Z]+\b' # Does not work, _ is a word char
echo "#FOOBAR$" | egrep '\b[A-Z]+\b' # Works, # and $ are not word chars
答案2
egrep '\b[A-Z]+\b' filename.sh
让我们把它分解一下:
[A-Z]
代表字符类中的任意一个字符[ABCDEFGHIJKLMNOPQRSTUVWXYZ]
。[A-Z]+
表示一次或多次出现大写字符。示例匹配为:A
、HELLO
、IS
、I
、ELEPHANT
等。'\bINDIA\b'
INDIA
: 与大写单词的整个单词搜索完全相同。它会不是匹配INDIANA
。因此应用相同的原则 -'\b[A-Z]+\b'
将查找具有一个或多个大写字母的整个单词。- 因此,
egrep '\b[A-Z]+\b' filename.sh
将在文件中搜索具有一个或多个大写字母的单词 -filename.sh
。
\b
- 与全词搜索完全相同。