首页 > 解决方案 > 使用 grep 的结果对文件进行排序

问题描述

我需要根据 grep 的结果对文件进行排序。例子:

cat cuts.txt | grep -P '(?<=[+]).*(?=[+])'
text +124+ text
text +034+ text
text +334+ text

如何根据 grep 找到的内容按新月顺序对行进行排序?

标签: sortingawksedgrep

解决方案


您能否尝试使用显示的示例进行以下、编写和测试。考虑到您需要按第二个字段的递增值进行排序。由于 OP 提到+digits+的值可能出现在任何地方,因此这里有这个通用解决方案。

grep -P '(?<=[+]).*(?=[+])' Input_file |
awk '
  match($0,/\+[0-9]+\+/){
    print substr($0,RSTART,RLENGTH),$0
  }
'  | sort -k1.2 | cut -d' ' -f2-

输出如下。

text +034+ text
text +124+ text
text +334+ text

逻辑解释:在命令中使用正则表达式grep命令的输出传递给命令以查找行中的值并打印第一个匹配值然后打印整行,这样做很容易解释为什么,因为我们现在总是在第一个字段上进行排序。一旦我们对第一个字段进行排序,然后使用 cut 从第二个字段开始获取所有内容,为什么因为第一个字段是命令更容易并且在实际输出中不需要。awkawk+digits+sortawksort

另外我们不需要使用单独的cat命令,我们可以直接通过grep命令读取 Input_file。


推荐阅读