sedを使用して変数に保存されたファイル名を書き込むには?

sedを使用して変数に保存されたファイル名を書き込むには?

bashスクリプトでは、sedファイル名がbash変数に格納されているファイルにどのように書きますか?あるファイルを内部で編集し、正規表現に一致する行を別のファイルにドラッグしてから最初のファイルから削除しようとするため、出力リダイレクトは機能しません。

それは次のとおりです。

sed -i '/^my regex here$/{;w file2;d;}' file1

...しかし、どちらも実際にfile1どこにfile2ありますか?変わりやすいそれ捕まえるファイル名。 (例えばfile2=$(mktemp)。)

だから私が本当に欲しいのはファイル名の変数拡張ですが、コマンドの残りの部分は拡張せずにsed内容全体をsed単一の引数としてコマンドに渡すことです。

何らかの理由で以下は機能しません。

sed -i '/my regex here/{;w '"$file2"';d;}' $file1

「{と​​一致しません」というメッセージが表示され、その理由を理解できませんでした。

私ができる方法はありますか?

ベストアンサー1

単一の式を使用しているのでsed(含む)以降の内容はすべてw}次のように解釈されます。仕事文書名前:

このパラメーターはwfile編集コマンドを終了する必要があります。

次の2番目のコマンドを追加すると、それを確認できます}

sed -e '/my regex here/{w '"$file2"';d;}' -e '}' $file1

その後、一致する行がwhere拡張my regex hereファイルに保存されます。正しい構文は、別のコマンドを使用するか、複数の式を使用することです。whatever;d;}whatever$file1

sed -e '/my regex here/{w '"$file1" -e 'd' -e '}' $file2

または1行に1つのコマンド:

sed '/my regex here/{
w '"$file1"'
d
}
' $file2

おすすめ記事