use*_*683 15 grep regular-expression
我一直在研究这个很多,但我仍然不清楚。这是什么字边界是什么意思?它有什么作用?
那么,例如,有人可以向我解释这个命令吗?
egrep '\b[A-Z]+\b' filename.sh
Run Code Online (Sandbox Code Playgroud)
ter*_*don 12
如所描述的在这里,例如,它匹配之间的话:
有三个不同的位置可以作为单词边界:
- 在字符串中的第一个字符之前,如果第一个字符是单词字符。
- 在字符串的最后一个字符之后,如果最后一个字符是单词字符。
- 在字符串中的两个字符之间,其中一个是单词字符,另一个不是单词字符。
以下是每种情况的示例:
对于字符串foobar
,第一种情况匹配
foobar
^-----here
Run Code Online (Sandbox Code Playgroud)对于字符串foobar
,第二种情况匹配
foobar
^--here
Run Code Online (Sandbox Code Playgroud)对于字符串foo bar
,第三种情况将匹配
foo bar
^--here, because space is not a word character
Run Code Online (Sandbox Code Playgroud)什么是单词字符取决于特定的正则表达式实现。但是,在所有情况下,字母 ([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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
24680 次 |
最近记录: |