다음과 같은 예가 있습니다.
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
적어도 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