텍스트 파일을 조작할 수 있는 sed, awk 또는 기타 도구에 대한 도움이 필요합니다.

텍스트 파일을 조작할 수 있는 sed, awk 또는 기타 도구에 대한 도움이 필요합니다.

파일 이름이 포함된 텍스트 파일 Test.m3u가 있습니다.

FileName1.mp4
FileName2.mp4
FileName3.mp4

다음 형식으로 재생목록을 만들어야 합니다.

#EXTM3U

#EXTINF:FileName1
PATH/FileName1.mp4
#EXTINF:FileName2
PATH/FileName2.mp4
#EXTINF:FileName3
PATH/FileName3.mp4

명령:

sed -i -e 's/^/PATH:/' test.m3u

각 줄에 Path를 추가하지만 각 줄 위에 #EXTINF:FileNameX 줄을 어떻게 넣을 수 있습니까?

답변1

펄을 구출해주세요!

perl -i -ne '/(.*)\.mp4/;print "#EXTINF:$1\nPATH/$_"' -- file

다음을 포함할 수도 있습니다.

BEGIN { print "#EXTM3U\n\n" }

출력에서 헤더를 가져옵니다.

  • -i파일을 "제자리"로 변경합니다.
  • -n입력을 한 줄씩 읽습니다.
  • 괄호는 ()첫 번째 캡처 그룹과 일치하는 캡처 그룹을 생성합니다 ( sed $1와 유사 ).\1
  • \., sed와 마찬가지로 리터럴 점과 일치합니다.
  • 인쇄단지 인수를 출력합니다.
  • $_아래는 -n현재 줄의 내용입니다

답변2

이 명령은 나에게 효과적이었습니다.

$ sed -e 's/\(.*\)\.\(.*\)/#EXTINF:\1\nPATH\/\1.\2/' test.m3u                                                
#EXTINF:FileName1
PATH/FileName1.mp4
#EXTINF:FileName2
PATH/FileName2.mp4
#EXTINF:FileName3
PATH/FileName3.mp4

설명:

.*- 이건 뭐든지 어울려

\(.*\)- 이것은 무엇이든 일치하며 재사용할 수 있습니다(\1 및 \2의 다음 항목).

\.- 이는 실제 점 문자와 일치합니다(이 경우 기본 이름과 확장자를 구분합니다).

\n- 새 줄이 삽입됩니다.

관련 정보