줄에 주석을 달고 주석 처리를 해제하는 Bash 스크립트

줄에 주석을 달고 주석 처리를 해제하는 Bash 스크립트

이 기간 동안 잘 지내시기 바랍니다. 문제는 내 txt 파일의 일부 줄에 주석을 달고 싶다는 것입니다. 여러 줄에 주석을 달고 주석 처리를 해제하는 코드가 있지만 회사 이름을 얻는 방법을 모르겠습니다. 내 텍스트 파일에는 다음 구성표가 있습니다.lunar_static KKK_<countryname>_NUM 08.00.name

lunar_static KKK_USA_NUM 08.00.Winter
lunar_static KKK_ITALY_NUM 08.Winter
lunar_static KKK_ITALY_NUM 08.00.Spring
lunar_static KKK_ITALY_NUM 08.00.Autumn
lunar_static KKK_SPAIN_NUM 08.00.Winter
lunar_static KKK_SPAIN_NUM 08.00.Spring
lunar_static KKK_FRANCE_NUM 08.00.Autumn
lunar_static KKK_FRANCE_NUM 08.00.Autumn
lunar_static KKK_ITALY_NUM 08.00.Ferari-taxi
lunar_static KKK_ITALY_NUM "/^08\\.00\\.Delta\\ M$/"
lunar_static KKK_ROMANIA_NUM "/^08\\.00\\.Delta\\ M$/"
lunar_static KKK_ITALY_NUM "/^08\\.00\\.Red\\_Park$/"

ITALY에 Autumn, Ferrari-taxi, Delta M, Red_Park라는 이름을 붙여 댓글을 달고 싶습니다. 나는 sed를 사용하여 몇몇 이름에 댓글을 달는 방법을 알고 있습니다.

sed -i '/Winter\|Spring/s/^/#/' file2.txt

그리고 주석 해제

sed -i '/Spring/s/^#//' file2.txt

하지만 국가 이름에도 불구하고 모든 이름을 선택합니다. 국가를 얻는 방법을 모릅니다. 예상 출력

    lunar_static KKK_USA_NUM 08.00.Winter
    lunar_static KKK_ITALY_NUM 08.Winter
    lunar_static KKK_ITALY_NUM 08.00.Spring
    #lunar_static KKK_ITALY_NUM 08.00.Autumn
    lunar_static KKK_SPAIN_NUM 08.00.Winter
    lunar_static KKK_SPAIN_NUM 08.00.Spring
    lunar_static KKK_FRANCE_NUM 08.00.Autumn
    lunar_static KKK_FRANCE_NUM 08.00.Autumn
    #lunar_static KKK_ITALY_NUM 08.00.Ferari-taxi
    #lunar_static KKK_ITALY_NUM "/^08\\.00\\.Delta\\ M$/"
    lunar_static KKK_ROMANIA_NUM "/^08\\.00\\.Delta\\ M$/"
    #lunar_static KKK_ITALY_NUM "/^08\\.00\\.Red\\_Park$/"

나는 모든 조언에 기뻐할 것입니다. 감사합니다!

답변1

검색어에 대상 국가를 포함하고 ITALY, 대안을 그룹화 하고, 두 검색어 (Autumn|Delta....)사이에 문자를 허용해야 합니다..*

sed -E '/ITALY.*(Autumn|Delta.. M|Red.._Park|Ferari-taxi)/s/^/#/' file1

\탈출을 피하기 위해 약간의 치트를 사용한 것입니다.

sed -E '/ITALY.*(Autumn|Delta\\\\ M|Red\\\\_Park|Ferari-taxi)/s/^/#/' file1

-i다음에 대한 위치 플래그를 포함하여 동일한 파일에서 변경을 수행합니다 .sed

sed -i -E .....

편집하다이것을 다른 질문으로 게시할 수도 있었지만...

\\"...sed를 입력하지 않고도 단어를 찾을 수 있나요 \\\\?..."즉 없이탈출그들을.

아니요. 그 이유는여기:

'\' 문자 뒤에 특정 일반 문자가 오면 특별한 의미를 갖습니다.

따라서 일치하는 문자열에서 the 뒤의 문자가 예약된 쌍(예: , , ) \중 하나를 형성하는 문자인 경우 리터럴을 찾고 있는지 개행 문자를 찾고 있는지 어떻게 알 수 있나요 ?\+\?\nsed\n

따라서 \문자 그대로 읽으려는 각 항목은 sed예약된 문자 시퀀스의 일부가 아니라는 것을 명확하게 알 수 있도록 이스케이프되어야 합니다.

관련 정보