
次の例があります。
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