대소문자를 일치시킨 후 줄을 바꾸는 방법은 몇 가지 문자를 반환해야 함

대소문자를 일치시킨 후 줄을 바꾸는 방법은 몇 가지 문자를 반환해야 함

다음과 같은 예가 있습니다.

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

관련 정보