0

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

$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”扩展并引发语法错误。

有什么建议么?

谢谢!

4

2 回答 2

0

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

awk -v arg0="$0" -v arg1="$1" '{ print arg0, arg1, $0 }' file
于 2013-10-31T18:57:08.020 回答
0

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

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

笔记

  1. 不需要循环。$*捕获所有参数
  2. 无需创建另一个文件并将其复制回来。-i将就地替换
  3. 用双引号将表达式括"起来以扩展 shell 变量
于 2013-10-31T19:03:18.013 回答