Linux에서 파일의 모든 여러 줄 문자열을 다른 여러 줄 문자열로 바꾸는 방법

Linux에서 파일의 모든 여러 줄 문자열을 다른 여러 줄 문자열로 바꾸는 방법

다음 내용이 포함된 products.txt 파일이 있습니다.

ID      Name
w01     Whipped cream
c01     Cocoa Powder
    s01     Jaggery
        e01     Egg
f05     Flour
xxxxxxx
xxxxxxxxxxx
xxxxxxxxxxx
    s01     Jaggery
        e01     Egg
f05     Flour
xxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxx
    s01     Jaggery
        e01     Egg
f05     Flour
xxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxx

다음 텍스트를 바꿔야 합니다.

    s01     Jaggery
        e01     Egg

그리고 -

            something
    else

행의 시작과 중간에 있는 탭을 확인하세요.

awk 또는 sed를 사용하여 위 문제에 대한 해결책을 찾는 데 도움을 주셔서 감사합니다.

감사합니다!

답변1

sed를 사용하면 N명령을 사용하여 줄을 연결한 다음 여러 줄에 대한 작업을 수행할 수 있습니다(예: s를 사용하여 검색 및 바꾸기). 표현식에서는 \t탭 및 \n줄 바꿈 문자를 사용합니다(줄을 N.

예:

sed -e'/^\ts01\tJaggery/N;s/\ts01\tJaggery\n\t\te01\tEgg/\t\tsomething\n\telse/'

위에서는 s01 이전에 탭 문자 1개, s01과 Jaggery 사이에 탭 문자 1개, e01 이전에 탭 문자 2개, e01과 Egg 사이에 탭 문자 1개가 있다고 가정합니다. 이 명령은 sed에게 regexp와 일치하는 행에서만 작동하고 ^\ts01\tJaggery해당 N행을 다음 행( )과 연결한 다음 및 와 s같은 탭 및 개행 문자를 포함하는 교체 작업( ) 을 수행하도록 지시합니다 .\t\n

관련 정보