目前,我所拥有的解决方案有点丑陋,并且非常像意大利面条代码...有一种很好的方法可以使用像ack
这样的“标准”工具吗?
我现在拥有的是这种格式的文件:
crap.txt:
IdentifierA Some Text
IdentifierB Some Other
这就是我目前的方式:
cat crap.txt |
ack (?<=IdentifierA ).+ |
awk '{ print $(NF-1), $NF }' |
pbcopy
这将在您的粘贴板中产生Some Text
。
不是让ack
回显与正则表达式匹配的行,然后使用awk
获取该行的最后两列,我是否可以获得特定的正则表达式匹配以打印到控制台?我尝试使用grep -o
,但似乎没有积极的看法......
答案 0 :(得分:1)
有些人喜欢这样:
awk '/IdentifierA/ { print $(NF-1),$NF}' crap.txt
Some Text
搜索IdentifierA
并打印该行的最后两个档案。
答案 1 :(得分: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
btw, 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