2015-06-06 63 views
3

我想测试一个文件中是否存在模式。测试是否存在文件中的模式,评估是否

  1. 如果模式存在(在列表中的文件中),则进行替换并更新相应的文件。
  2. 如果模式不存在,则不执行任何操作。

到目前为止,我已经做了:

if [ -f $((`awk '/Pattern1/' $FILE`))];then 
     sed 's/Pattern1/\nWORD/g' $FILE > a 
     mv a $FILE 
    fi 

但是,当我测试它,我得到以下错误:

syntax error: invalid arithmetic operator 

而且我不想评价数字部分,只要pttern〜字符串存在或不存在。文件1

输入

Rho = 1.1955904623E+02 Rho at Nucleus = 1.1955904594E+02 

的文件2

Rho = 1.1955904623E+02 
+2

如果您使用awk来查找模式,为什么不使用awk来完成整个工作?似乎很奇怪切换到sed。 –

+0

你会推荐我什么,而不是我的程序? –

+1

你错过了之前的一个空格字符]; bash是残酷的! – josifoski

回答

2

输入你可以简单地继续与替代,如果模式存在的东西将被改变,如果没有,该文件将不会做任何事情。

awk '{sub(/Pattern1/, "\nWORD"); print}' $FILE > tmp && mv tmp $FILE 

检查this question