目前,我的解决方案有点难看,很像意大利面代码.有什么好的方法可以用像ack这样的“标准”工具来完成吗?
我现在拥有的是一个以这种格式显示的文件:
crap.txt:
IdentifierA Some Text
IdentifierB Some Other我现在就是这样得到的:
cat crap.txt |
ack (?<=IdentifierA ).+ |
awk '{ print $(NF-1), $NF }' |
pbcopy这将产生Some Text在您的纸板。
与其让ack回显与regex匹配的行,然后用awk获取该行的最后两列,不如让特定的regex匹配输出到控制台?我试过使用grep -o,但这似乎没有积极的背后.
发布于 2013-12-18 21:14:05
有些人是这样的:
awk '/IdentifierA/ { print $(NF-1),$NF}' crap.txt
Some Text此搜索IdentifierA并打印最后两次从该行提交的文件。
发布于 2013-12-18 21:29:39
awk -F'IdentifierA\\s*' '$0=$2' file无论目标部分中有多少空格,这一行都会在IdentifierA之后选择所有文本(去掉前导空格/制表符)。这意味着,您不必使用print $(NF-n), $(NF-n-1)...,或者如果文本具有TAB而不是space
例如,在这种情况下:
IdentifierA a b c d e f g h i j k l测试:
kent$ echo "IdentifierA Some Text
IdentifierB Some Other"|awk -F'IdentifierA\\s*' '$0=$2'
Some Text
kent$ echo "IdentifierA a b c d e f g h i j k l"|awk -F'IdentifierA\\s*' '$0=$2'
a b c d e f g h i j k l 顺便说一句,如果您想提取文本,grep是一个非常方便的工具:
kent$ echo "IdentifierA a b c d e f g h i j k l"|grep -oP 'IdentifierA\s*\K.*'
a b c d e f g h i j k lhttps://stackoverflow.com/questions/20668378
复制相似问题