示例行:
04/07/2016 11:23:44 [8344] BDFDD123A Some Text Here (Word: ABD_ABDCD, Word: Word, Word: Word Word-ABCAbcAbc-HOSTNAME.DOMAINNAME.COM-ASDF).
我想提取“ HOSTNAME.DOMAINNAME.COM-ASDF”部分。
“ HOSTNAME”部分之前始终有一个“-”,并且该行始终以“。”结尾。但不总是 ”)。”
好像我可以对每一行说1.)找到字符串“ .COM” 2.)然后返回到上一个“-”并前进到下一个“。”。并给我介于两者之间的所有东西都行得通……但是我不知道该怎么做。
通常,我会尝试使用某种分隔符进行分隔,但是每行分隔符的数量并不相同。任何想法如何解决这个问题?
使用grep
与PCRE( -P
):
grep -Po -- '-\K[^-]+\..*?(?=(?:\)|)\.$)' file.txt
-
匹配a-
并\K
放弃匹配
[^-]+\..*?
匹配所需的子字符串
零宽度正向超前模式(?=(?:\)|)\.$)
可确保匹配项紧跟在行尾).
或仅.
在行尾。
例子:
$ grep -Po -- '-\K[^-]+\..*?(?=(?:\)|)\.$)' <<<'04/07/2016 11:23:44 [8344] BDFDD123A Some Text Here (Word: ABD_ABDCD, Word: Word, Word: Word Word-ABCAbcAbc-HOSTNAME.DOMAINNAME.COM-ASDF).'
HOSTNAME.DOMAINNAME.COM-ASDF
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句