我想grep这个特殊的模式。模式如下
**xMT123xMT123x**ABCxxxxxxxxxxxxxxxxxx_123_29887
文件test.txt里面有以下数据
NNN**xMT123xMT123x**ABCxxxxxxxxxxxxxxxxxx_123_29887_20140628.csv
我尝试使用grep" ** xMT123xMT123x ** ABCxxxxxxxxxxxxxxxxxx_123_29887" test.txt但它没有返回任何东西。请建议
编辑:
嗨,基本上我是在一个循环中,有时我只能得到这种模式的文件。所以目前我正在推出像grep" $ i" test.txt适用于所有情况,除非我必须遇到这样的模式。
我实际上正在为确切的file_number,文件序列而努力。如果它说123_29887它将是123_29887。感谢。
答案 0 :(得分:1)
您可以使用:
grep -P "(?i)\*\*[a-z\d]+\*\*[a-z]+_\d+_\d+" somepath
(?i)
打开不区分大小写的模式\*\*
匹配两个开场明星[a-z\d]+
匹配字母和数字\*\*
匹配另外两颗星[a-z]+
匹配字母_\d+_\d+
匹配下划线,数字,下划线,数字如果您需要更具体(例如,您知道一组数字总是有三位数),您可以替换表达式的某些部分:例如,\d+
变为\d{3}
< / p>
匹配文字但尚未知的模式:\Q
和\E
如果您收到需要匹配的文字模式,例如**xMT123xMT123x**ABCxxxxxxxxxxxxxxxxxx_123_29887
,则问题是需要转义特殊的正则表达式字符,例如*
。如果整个字符串是文字,我们通过在\Q
和\E
之间转义整个字符串来完成此操作:
grep -P "\Q**xMT123xMT123x**ABCxxxxxxxxxxxxxxxxxx_123_29887\E" somepath
当然,在循环中,您可以通过在两端连接\Q
和\E
来以编程方式构建该正则表达式。