我需要根据grep的结果对文件进行排序。例子:
cat cuts.txt | grep -P '(?<=[+]).*(?=[+])'
text +124+ text
text +034+ text
text +334+ text
如何根据grep找到的内容,按升序对行进行排序?
请您尝试下面这个已写好并经过示例测试的方法。考虑到您需要按照第二个字段的升序值进行排序,因此在此提供了一个通用解决方案,因为 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
逻辑解释: 在使用正则表达式的awk
命令中,将grep
命令的输出传递给awk
命令,以查找行中的+数字+
值,并打印第一个匹配的值及整行。通过这样做,对于sort
来说,我们始终可以在第一个字段上进行排序。一旦我们在第一个字段上进行排序,然后使用cut
命令获取从第二个字段开始的所有内容,因为第一个字段是由awk
命令添加的额外字段,只是为了使sort
更易于操作,并不需要在实际输出中显示。
此外,我们无需使用单独的cat
命令,可以直接通过grep
命令读取输入文件。
cat
命令,直接读取 Input_file(包含要读取的值的文件)到grep
命令中即可。 - RavinderSingh13