我需要使用命令行中的grep来匹配具有以下格式的字符串
_ADFADF_ASFDSAFD_AFDSADF_
不应匹配
ASDFASDF_ASFDASDF_AFSDASFD
_ASDFASDF_ASDFASDF_ASDFAS
ASDFASD_ASDFSADF_ASFDASD_
匹配应仅适用于以下划线开头并以下划线结尾的字符串,下划线可能位于字符串的中间。例如,字符串可以位于行的中间....
SetODBCServerOverride.port=_CLIENT_ODBC_TUNNEL_PORT_
在以下示例中,我需要匹配_THIS_MATCHES_RIGHT_HERE_并且不匹配THIS_DOES_NOT_MATCH
Blah Blah Blah" _THIS_MATCHES_RIGHT_HERE _ "这很好 Yadda Yadda THIS_DOES_NOT_MATCH并不是很好。 _THIS_ALSO_DOES_NOT_MATCH so ...
答案 0 :(得分:3)
grep -E "([^a-zA-Z0-9]|^)_[A-Za-z0-9_]*_([^a-zA-Z0-9]|$)" filename
答案 1 :(得分:2)
您可以使用^
和$
分别指定一行的开头和结尾:
$ grep '^_.*_$' file.txt
修改:
强>
现在已经明确了要求 - 您可以使用特殊的\<
和\>
字符分别指定单词的开头和结尾,并使用\S
指定非空白字符(所以你不匹配像_ABC DEF_
这样的字符串:
$ grep '\<_\S*_\>' file.txt
答案 2 :(得分:1)
这应该有效
grep ^_ | grep _$
或者您可以使用REGEX
grep -E "^_[A-Z_]+_$"