次の内容を含むファイルがあります。
name=MOD0
私が興味を持っていない追加の行がたくさんあります。この行を次に変換する必要があります。
[MOD0]
ファイルから他のすべての行を削除します。 MOD0部分は予測できないため、^name =パターンを介してその行を一致させる必要があります。 1回の置換(「name =」削除)を実行できますが、まだ同じ一致行にある別のタスク(括弧で囲む)を実行するようにsedに指示するにはどうすればよいですか?次のコマンドは、各行を角括弧で囲みます。
sed -n -e '/^name=/ s/^name=//p; s/^.*$/\[&\]/p'
答え1
中かっこを使う:
sed -n '
/^name=/ {
s///p
s/.*/[&]/p
}'
空の検索パターン(例s///p
:)は最後のパターンを再利用します。
または:
sed '/^name=/!d;s///p;s/.*/[&]/'
(つまり、開始しない行を削除してname=
から残りを処理します。)
出力なしname=xxx
で置き換えるには、次のようにします。[xxx]
xxx
sed -n 's/^name=\(.*\)/[\1]/p'
(またはp
上記の他のコマンドの中から最初のコマンドのフラグを削除してください)。s