在AWK或SED中找到带正则表达式的字符串

时间:2013-10-29 10:06:04

标签: regex sed awk

我想在File中找到例如以下字符串9Stest1.test2D9。然后我想剪切前2个charechter和最后2个charechter,最后打印文本befor和之后。在两个单独的线。

示例文字:

7U8vTest(#G-HLjYM6QqJj1j"7MFx$^Qd
.f@alU|A#Z<inCWV6a=L?o`A5vIod"%Mm+YW1RM@,L;aN
r^n<&)}[??!VcVIV**9Stest1.test2D9**94EN~yK,$lU=9?UT.[
e`)G:FS.nGz%?@~k!20aLJ^PU-[@}0W\ !8x
cujOmEK"1;!cI134lu%0-A +/t!VIf?8uT`!
aC1QAQY>4RE$46iVjAE^eo5yR|
1?/T?<H5,%G~[|9I/c&8MY$O]%,UYQe{!{Bm[rRC[
aHC`<m?BUau@N_O>Yct.MXo[>r5^uV&26@MkYB'Kiu\Y
K(*}ldO:ZQnI8t989fi+

输出应如此:

test1
test2

我尝试使用以下代码grep "[0-9][a-zA-Z]\+\.[a-zA-Z]\+[0-9]"来查找字符串。现在我可以使用cut command切换第一行但是最后两行? 我认为AWK可以轻松解决我的问题,但我不知道怎么做。 感谢

2 个答案:

答案 0 :(得分:4)

如果有帮助,请看这一行:

kent$  grep -Po '(?<=9S).*?(?=D9)' file
test1.test2

或更具动态性,这适用于您的示例:

kent$  grep -Po '(?<=\d[a-zA-Z]).*\..*(?=[a-zA-Z]\d)' file
test1.test2

修改

正如@devnull建议的那样,为了获得所需的输出,你可以

grep -Po '(?<=\d[a-zA-Z]).*\..*(?=[a-zA-Z]\d)' file|tr '.' '\n'

答案 1 :(得分:1)

这取决于搜索的方式和内容。与**

之间的文字类似
awk -F"**"  '{a=substr($2,3,length($2)-4)} a {print a}'
test1.test2
dO:ZQnI8t989f