Sed 또는 awk - 패턴 일치 후 새 줄 삽입

Sed 또는 awk - 패턴 일치 후 새 줄 삽입

여러 개의 URL이 포함된 파일이 있습니다. 하지만 불행하게도 모든 URL은 한 줄에 있습니다.

고양이 URL_파일

http://transfer.sh/PIGfk/my-file.002554http://transfer.sh/Ep9Md/my-file.002555http://transfer.sh/Ep9Md/my-file.002556http://transfer.sh/Ep9Md/my-file.002557

예상 출력:

http://transfer.sh/PIGfk/my-file.002554
http://transfer.sh/Ep9Md/my-file.002555
http://transfer.sh/Ep9Md/my-file.002556
http://transfer.sh/Ep9Md/my-file.002557

답변1

GNU grep

grep -oP 'http://.+?(?=http://|$)' url_file

답변2

사용 perl:

perl -pe 's#(?<=.)(?=http://)#\n#g' url_file

설명하다

이것은긍정적 인 전망로 시작하는 하위 문자열을 찾아 http://그 앞에 개행 문자( )를 넣습니다 \n.

그것은 또한활성 후면보기문자가 앞에 오는 경우에만 일치합니다 http://. 이렇게 하면 줄의 첫 번째 URL 앞에 개행 문자가 삽입되지 않습니다. 여러 행으로 끝나는 경우 매우 편리합니다.

고쳐 쓰다

@steeldriver의 훌륭한 의견 이전에는 Lookbehind를 사용하지 않고 sed '1d'첫 번째 줄을 제거하는 데 의존했습니다.

답변3

다음 GNU 명령을 사용할 수 있습니다 sed.

sed 's,http://,\n&,g' url_file | tail -n +2

패턴을 찾아 패턴 http://앞에 CR을 삽입합니다.

tail -n +2이 sed 명령으로 삽입된 첫 번째(빈) 줄을 건너뜁니다.

답변4

저는 아래 3가지 방법으로 했어요

python

    #!/usr/bin/python
    import re
    k=open('filename','r')
    for i in k:
        print re.sub("http","\nhttp",i)



perl

perl -pne "s/http/\nhttp/g" filename



sed command

sed "s/http/\n&/g" filename

산출

http://transfer.sh/PIGfk/my-file.002554
http://transfer.sh/Ep9Md/my-file.002555
http://transfer.sh/Ep9Md/my-file.002556
http://transfer.sh/Ep9Md/my-file.002557

관련 정보