BASH - 搜索文件的模式然后追加该行

时间:2013-10-31 18:46:53

标签: bash

我已经看到了一些关于如何搜索模式然后将特定字符串附加到该行的示例。我想,我想要完成的是有点不同。我正在写一个简单的脚本,它将接受一个参数,在文件中搜索一个字符串,如果找到,则将参数附加到找到该字符串的行的末尾。我通过这样做来调用这个脚本:

$ bash- ./myscript.sh arg1 [arg2] ...

对于代码我有类似的东西:

for ARGS in $*
do
    gawk '{a[NR]=$0}/<patter to be found>/{a[NR]=a[NR] $ARGS}END{for(i=1;i<=NR;i++)print a[i]}' $ORIGFILE > $DESTFILE
    cp $DESTFILE $ORIGFILE
done

问题是单引号不会扩展变量,我没有找到正确的语法来完成。没有任何东西扩展或“$ 0”扩展并且会引发语法错误。

有什么建议吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

您可以使用以下语法将shell变量传递给awk:

awk -v arg0="$0" -v arg1="$1" '{ print arg0, arg1, $0 }' file

答案 1 :(得分:0)

尝试使用sed。这项任务似乎比awk更容易。

sed -i "s/<pattern>/$*/" $ORIGFILE

备注

  1. 无需循环。 $*捕获所有参数
  2. 无需创建其他文件并将其复制回来。 -i将进行就地替换
  3. 在双引号"中包含表达式以扩展shell变量