目前,我拥有的解决方案有点丑陋,并且非常像意大利面条代码......有没有一种好方法可以使用像 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
但这似乎没有积极的回望......
有些像这样:
awk '/IdentifierA/ { print $(NF-1),$NF}' crap.txt
Some Text
此搜索IdentifierA
并打印该行的最后两个文件。
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 'IdentifierAs*K.*'
a b c d e f g h i j k l