sed を使用して行の最初の「;」を文字列に置き換え、2番目の「;」を別の文字列に置き換えます。

sed を使用して行の最初の「;」を文字列に置き換え、2番目の「;」を別の文字列に置き換えます。

次の形式のセミコロンで区切られたプレイリストがあります。

Thåström ; Stjärna som är din ; Skebokvarnsv. 209

;最初の項目をダッシュ​​(-)に置き換え、;2番目の項目を「- Album:」文字列に置き換えたいと思います。

次の設定を試していますが、正しくありません。 sed 's/\;/\-/1;s/\;/\-\ Album\:/2'

ブール結果は次のとおりです。

Thåström - Stjärna som är din ; Skebokvarnsv. 209

最初の段落に間違った部分があることを知っています。なぜなら、次を実行すると、行のsed 's/\;/\-\ "Album\:"/2'末尾で正しい結果が得られるからです。

Thåström ; Stjärna som är din - Album: Skebokvarnsv. 209

どんな助けでも大変感謝します!

ベストアンサー1

私はMacOS 13.5.2の一般的な「sed」でこれを実行しています。

私はあなたが欲しいものを得るのに非常に近いと思います。私が採用した設定は、コマンドラインで指定された2つの式のみを使用します。-f <command_file>必要に応じてファイルに入れてオプションを使用することもできます。

sed -e 's/;/-/' -e 's/;/- Album:/'

最初の式はその行の最初のセミコロンで置き換えられます。 2番目の式は次の式を変更します。順次処理されるため、例のように最後に数値フラグを付けることを心配する必要はありません。

出力例を区別するには、空白行を追加します。

echo 'Thåström ; Stjärna som är din ; Skebokvarnsv. 209' \
| sed -e 's/;/-/' -e 's/;/- Album:/' 

Thåström - Stjärna som är din - Album: Skebokvarnsv. 209

到着予定時刻:元の例では、2番目の式に2フラグがあります。これは2番目のものを置き換えます;。ただし、最初の交換は最初の交換を実行する;ため、コマンドは交換を試みます。第三 ;オンライン。ただ放すと2期待どおりに機能します。

おすすめ記事