2013-10-31 80 views
0

我見過幾個關於如何搜索模式的例子,然後在該行附加一個特定的字符串。我想,我想要完成的事情有點不同。我正在編寫一個簡單的腳本,它將接受一個參數,在文件中搜索一個字符串,如果找到,則將該參數附加到找到該字符串的行的末尾。我想這樣做把這個腳本: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」擴展並引發語法錯誤。

有什麼建議嗎?

謝謝!

+1

您確定要使用'$ *'? –

回答

0

您可以使用此語法通過shell變量給AWK:

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

嘗試使用sed。這個任務似乎比awk更容易。

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

注意

  1. 無需循環。 $*捕獲所有參數
  2. 無需創建另一個文件並將其複製回來。 -i會做就地更換
  3. 附上雙引號"內表達擴大shell變量
相關問題