あなたがやろうとしていることは、awk
orとは何の関係もありませんsed
。たとえば、次を参照してください。
print " '\'' data_between_two_single_quotes '\'' "
最初の文字は、開始シェル文字列リテラルを'
閉じます。'
シェル リテラルは、このためのバックスラッシュ エスケープをサポートしていません。'\''
一重引用符リテラルを閉じ、(一重引用符リテラルの外でサポートされているエスケープを使用して) 引用文字を指定してから、新しい一重引用符リテラルを再度開きます。一重引用符を取得するための 4 文字のエスケープ シーケンスと考えることができます。
したがって、awk
コマンドは次のようになります。
awk '/\('\''Backup/ {print " ('\''Drop the no good white.cap ;'\'' ) , " } { print }' filename.sh
sed
コマンドは次のようになります。
sed -e '/\('\''Backup/i\
('\''Drop the no good white.cap ;'\'' ) , ' filename.sh
編集:
for i in *; do awk -v database="$DB" -v table="$TB" 'BEGIN { print "header" } /backup/ { print " ('\''DROP TABLE " database "." table ";'\'' ) , " }1' "$i" > "${i}.new"; done
説明:
シェルfor
ループを使用して、ディレクトリ内のすべてのファイルをループします。ブロックを含むファイルにヘッダーを追加しますBEGIN
。単語を見つけて、シェル変数とbackup
を含む行を出力します。スクリプトの最後で、デフォルトで印刷を有効にします。の省略形です。HTH。DB
TB
... }1'
awk
{ print }