linux替换字符串如果其他字符串显示' n'以前的行

时间:2016-05-11 14:29:05

标签: linux sed

我有一个简单的问题。

在具有下一个结构的文件中。

  

条件   第1行   第2行   3号线
  要根据条件改变的字符串。

此结构在文件中重复未定义的次数。
我必须根据第1行的值更改第4行。 在文件的所有发生中。 我已经在shell脚本中创建了下一个函数,并且工作正常。

~/.PyCharm2016.1

但它效率不高,因为sed会为每次更改制作一份文件副本。 那么,你会怎样做才能提高效率呢?

编辑: 为了澄清,第4行无法到来,那么我必须验证它是否存在,然后在条件之前验证3行。

1 个答案:

答案 0 :(得分:1)

提供此输入文件:

condition1 line1
line2
line3
String to change depending on the condition.
condition2 line1
line2
line3
String to change depending on the condition.
condition1 line1
line2
line3
String to change depending on the condition.

您可以使用此sed脚本(sed -f script.sed input)

/condition1/,+3 {t; t; s/change/XXXXX/ }
/condition2/,+3 {t; t; s/change/YYYYY/ }   

这会产生以下输出:

condition1 line1
line2
line3
String to XXXXX depending on the condition.
condition2 line1
line2
line3
String to YYYYY depending on the condition.
condition1 line1
line2
line3
String to XXXXX depending on the condition. 

(+3范围地址是GNU扩展,所以你必须使用GNU sed)