有没有一种很好的方法可以使用正则表达式将文件列复制到我的粘贴板中?

时间:2013-12-18 21:06:03

标签: regex awk ack pbcopy

目前,我所拥有的解决方案有点丑陋,并且非常像意大利面条代码...有一种很好的方法可以使用像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,但似乎没有积极的看法......

2 个答案:

答案 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