首页 > 解决方案 > sed 条件替换

问题描述

我有一个文件,其中一些行包含看起来像这样的日期

2017/07/21=2017/05/23 some text
  somethign
  somthig

2017/04/22=2017/05/23 text2
  smt1
  smt2

我想更改第一次和第二次约会的地点,但前提是第一次约会第二次之前。

是否可以使用sed或其他一些命令行 linux 实用程序进行类似的操作?

标签: regexbashawksed

解决方案


完成这项工作的最佳工具是awk. awk 是记录解析和字段比较的完美工具。以下将满足您的期望:

awk '/\//&&/=/{ split($1,d,"="); if (d[1] > d[2]) $1 = d[2]"="d[1] }1' <file>

这输出:

2017/05/23=2017/07/21 some text
  somethign
  somthig

2017/04/22=2017/05/23 text2
  smt1
  smt2

推荐阅读