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期待どおりに機能します。

答え2

使用gawk:

$ awk '{ sub(/;/,"-"); sub(/;/, "- Album:")}1' file       

$ awk '{ print gensub(/(^[^;]*);([^;]*);(.*)/, "\\1-\\2- Album:\\3", g);}' file

同じパターンを異なる文字列に複数回置き換えるには、次の方法を使用できます。

$ awk 'BEGIN{ar[1]="-"; ar[2]="- Album:";}{r=$0; for(i=1;i<=length(ar);i++) r=gensub(/;/, ar[i], 1, r); print r}' file

答え3

使用幸せ(以前のPerl_6)

~$ raku -ne 'S/ \; /-/ andthen S/ \; /- Album:/.put;'  file

RakuはPerlプログラミング言語シリーズのプログラミング言語です。上記では、-ne自動印刷ではなく1行ずつコマンドラインフラグを使用し、単に2回の連続S///置換を実行してからoutを実行しましたput。このput呼び出しは行末に改行文字を追加します。

入力例:

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

出力例:

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

これとても良いRakuの1つの側面は、Unicodeをサポートすることです。したがって、Unicode属性を使用してテキストをフィルタリングおよび/または置き換えることができます。

~$ raku -ne 'S/ \; /-/ andthen S/ \; /- Album:/ andthen S/ <:Script<Runic>>+ /⁒/.put;'  

入力例:

16F1 ᛱ Thåström ; Stjärna som är din ; Skebokvarnsv. 209
16F2 ᛲ Thåström ; Stjärna som är din ; Skebokvarnsv. 209
16F3 ᛳ Thåström ; Stjärna som är din ; Skebokvarnsv. 209

出力例:

16F1 ⁒ Thåström - Stjärna som är din - Album: Skebokvarnsv. 209
16F2 ⁒ Thåström - Stjärna som är din - Album: Skebokvarnsv. 209
16F3 ⁒ Thåström - Stjärna som är din - Album: Skebokvarnsv. 209

上記の入力例には3つのルーン文字が挿入されています。 Raku正規表現は、以下に基づいて文字を識別および/またはフィルタリングできます。Unicodeスクリプト指定されます(この場合<:Script<Runic>>)。ルーン文字はUnicodeの「商用マイナス」(U + 2052)に正しく置き換えられますが、StackOverflowではこれを表示できないようです。

https://www.unicode.org/charts/PDF/U16A0.pdf
https://docs.raku.org/言語/regexes
https://raku.org

答え4

すべてのsedを使用してください:

$ sed 's/;\([^;]*\);/-\1- Album:/' file
Thåström - Stjärna som är din - Album: Skebokvarnsv. 209

関連情報