有条件的替代

时间:2018-05-14 09:41:05

标签: regex bash awk sed

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

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

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

我想更改第一个和第二个日期的位置,但前提是第一个日期 之前。

是否可以使用sed或其他一些命令行linux实用程序?

1 个答案:

答案 0 :(得分:2)

这项工作的最佳工具是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