大文字と小文字を一致させた後に行を置き換えるには、いくつかの文字を返す必要があります

大文字と小文字を一致させた後に行を置き換えるには、いくつかの文字を返す必要があります

次の例があります。

1. TNT 00:00 2. Swing From The Gutters 7:34 3. Ten-Day Interval 13:29 4. I Set My Face To The Hillside 18:16 5. The Equator 24:26 6. A Simple Way To Go Faster Than Light That Does Not Work 28:27 7. The Suspension Bridge At Iguazu Falls 32:03 8. Four-Day Interval 37:42 9. In Sarah, Mencken, Christ And Beethoven There Were Women And Men 42:29 10. Almost Always Is Nearly Enough 50:01 11. Jetty 52:45 12. Everglade 1:01:09 1:05:32

私はそれを次のように変換したいと思います:

1. TNT 00:00 
2. Swing From The Gutters 7:34 
3. Ten-Day Interval 13:29 
4. I Set My Face To The Hillside 18:16 
5. The Equator 24:26 
6. A Simple Way To Go Faster Than Light That Does Not Work 28:27 
7. The Suspension Bridge At Iguazu Falls 32:03 
8. Four-Day Interval 37:42 
9. In Sarah, Mencken, Christ And Beethoven There Were Women And Men 42:29 
10. Almost Always Is Nearly Enough 50:01 
11. Jetty 52:45 
12. Everglade 1:01:09 1:05:32

私が従う論理パスは、ブレーキのガイドとして使用できるトラック番号とともに常に「ドット」(.)があることを知っています。問題は、トラック数を保存するために1〜2文字の後ろにクロールする必要があることです。

答え1

少なくともGNU sedを使用すると、修飾子を使用して、最初の一致するシーケンスを除くすべての項目の前に改行文字を挿入できます2g

sed -E 's/[0-9]+\./\n&/2g' file

答え2

数字と点をキャプチャし、その前に改行を挿入します。

$ perl -pe 's/\s(\d+\.)/\n$1/g' file 
1. TNT 00:00 
2. Swing From The Gutters 7:34 
3. Ten-Day Interval 13:29 
4. I Set My Face To The Hillside 18:16 
5. The Equator 24:26 
6. A Simple Way To Go Faster Than Light That Does Not Work 28:27 
7. The Suspension Bridge At Iguazu Falls 32:03 
8. Four-Day Interval 37:42 
9. In Sarah, Mencken, Christ And Beethoven There Were Women And Men 42:29 
10. Almost Always Is Nearly Enough 50:01 
11. Jetty 52:45 
12. Everglade 1:01:09 1:05:32

答え3

GNUを使用するawkか、次のようにしますmawk

$ awk -v RS='[0-9]+\\.' 'NR > 1 { print NR-1 ".", $0 }' file
1.  TNT 00:00
2.  Swing From The Gutters 7:34
3.  Ten-Day Interval 13:29
4.  I Set My Face To The Hillside 18:16
5.  The Equator 24:26
6.  A Simple Way To Go Faster Than Light That Does Not Work 28:27
7.  The Suspension Bridge At Iguazu Falls 32:03
8.  Four-Day Interval 37:42
9.  In Sarah, Mencken, Christ And Beethoven There Were Women And Men 42:29
10.  Almost Always Is Nearly Enough 50:01
11.  Jetty 52:45
12.  Everglade 1:01:09 1:05:32

コードは、awk正の整数と点()で[0-9]+\.区切られたレコードセットで行を読み取ります。コード本文は、現在のレコード番号(最初のレコードが最初のレコードより前の空のレコードであるため、1を引いた値1.)、ドット、レコードの残りの部分を印刷します。

答え4

古いGNU grepソリューション

grep -oP '\d+[.]((?!\d+[.]).)+(?=\h)' file

関連情報