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