Grep表示字符串开头并以下划线结尾

时间:2018-03-22 19:21:37

标签: linux shell grep command-line-interface

我需要使用命令行中的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 ...

3 个答案:

答案 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_]+_$"