1

目前,我所拥有的解决方案有点丑陋,而且像意大利面条代码一样......有没有一种很好的方法可以使用“标准”工具来做到这一点ack

我现在拥有的是这种格式的文件:

废话.txt:

IdentifierA Some Text
IdentifierB Some Other

这就是我目前得到它的方式:

cat crap.txt |
ack (?<=IdentifierA ).+ |
awk '{ print $(NF-1), $NF }' |
pbcopy

这将Some Text在您的粘贴板上产生。

除了ack回显与正则表达式匹配的行,然后使用 获取该行的最后两列awk之外,我可以只获取特定的正则表达式匹配以打印到控制台吗?我尝试使用grep -o,但这似乎并没有积极的后视...

4

2 回答 2

1
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 l
于 2013-12-18T21:29:39.033 回答
1

有些像这样:

awk '/IdentifierA/ { print $(NF-1),$NF}' crap.txt
Some Text

这将搜索IdentifierA并打印该行的最后两个文件。

于 2013-12-18T21:14:05.340 回答