sorting - 使用 grep 的结果对文件进行排序
问题描述
我需要根据 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
逻辑解释:在命令中使用正则表达式grep
命令的输出传递给命令以查找行中的值并打印第一个匹配值然后打印整行,这样做很容易解释为什么,因为我们现在总是在第一个字段上进行排序。一旦我们对第一个字段进行排序,然后使用 cut 从第二个字段开始获取所有内容,为什么因为第一个字段是命令更容易并且在实际输出中不需要。awk
awk
+digits+
sort
awk
sort
另外我们不需要使用单独的cat
命令,我们可以直接通过grep
命令读取 Input_file。
推荐阅读
- firebase - 如何在离线模式下更新 Firebase 实时数据库“推送”上的 UI
- python - 在 Django 中使用 JSONField 进行批量更新
- python - pandas_datareader._utils.RemoteDataError:无法读取 URL:https://finance.yahoo.com/quote/CBOE
- linux - 在詹金斯管道中用 envsubst 替换文件变量
- angular - 具有多个嵌套组件的 Angular 2-way 绑定
- javascript - 如何同时验证多个输入字段
- c# - 如何使autofac实时解析带参数的构造函数?
- android - 添加带有导航抽屉的启动屏幕活动不起作用
- c - GStreamer GstVideoTestSrcPattern 枚举 - 它在哪里?
- c# - Botframework v4:发送打字指示