bash를 통해 삽입된 템플릿으로 변경 문자열 사용

bash를 통해 삽입된 템플릿으로 변경 문자열 사용

삽입이 필요한 파일이 있습니다. 삽입은 파일의 기존 문자열에 따라 달라지며 해당 파일의 키워드를 사용하여 식별할 수 있습니다. 삽입 자체는 특정 줄을 따라야 합니다. 제 예에서는 "/여기/" . 저는 bash를 평소에 사용하지 않아서 좀 무기력합니다.

삽입 부분이 작동하지만 선택 부분이 아닌 모든 항목에 대해서만 작동합니다.

sed -i -e '/여기/a HelloWorld' $path

sed -e /.열쇠(.)()/\1/'

현재 파일:

hello_world_12353_KEY_HalloWelt_1_2_3()
{

   ...

   /*HERE*/
}

abcdefg_KEY_HalloHaus_8_2_3()
{

    ...

   /*HERE*/
}

원하는 결과:

hello_world_12353_KEY_HalloWelt_1_2_3()
{

   ...

   /*HERE*/
   KEY_HalloWelt_1_2_3_Addon()
}

abcdefg_KEY_HalloHaus_8_2_3()
{

   ...

   /*HERE*/
   KEY_HalloHaus_8_2_3_Addon()
 }

답변1

$ sed -e '/.*KEY\(.*\)()/ { h; s//   KEY\1_Addon()/; x; }' -e '/HERE/ G' file
hello_world_12353_KEY_HalloWelt_1_2_3()
{

   ...

   /*HERE*/
   KEY_HalloWelt_1_2_3_Addon()
}

abcdefg_KEY_HalloHaus_8_2_3()
{

    ...

   /*HERE*/
   KEY_HalloHaus_8_2_3_Addon()
}

sed명령에는 두 가지 주요 표현식이 포함되어 있습니다.

  1. KEY...something...()일치하는 행이 발견되면 첫 번째 항목이 실행됩니다. 그런 다음 현재 줄을 예약된 공간에 저장하고 문자열 앞의 비트를 미리 결정된 들여쓰기로 바꾼 다음 h괄호 앞에 비트를 추가합니다. 그러면 나중에 삽입할 행이 생성됩니다. 그런 다음 예약된 공간과 편집 버퍼가 교체되어 수정되지 않은 원본 줄이 출력됩니다.KEY_Addonx
  2. 행이 일치하면 HERE(이 또는 이와 유사한 보다 정확한 패턴으로 변경할 수 있음 \,/\*HERE\*,) 예약된 공간의 현재 내용이 개행 G문자를 구분 기호로 사용하여 편집 버퍼에 추가됩니다.

답변2

awk를 사용하십시오.

$ awk '
    { print }
    match($0,/KEY.*\(/) { new=substr($0,RSTART,RLENGTH-1) "_Addon()" }
    sub(/\/\*HERE\*\/.*/,"") { print $0 new }
' file
hello_world_12353_KEY_HalloWelt_1_2_3()
{

   ...

   /*HERE*/
   KEY_HalloWelt_1_2_3_Addon()
}

abcdefg_KEY_HalloHaus_8_2_3()
{

    ...

   /*HERE*/
   KEY_HalloHaus_8_2_3_Addon()
}

/*HERE*/위의 코드는 문자열이 들여쓰기된 공백과 탭 수에 관계없이 들여쓰기된 줄바꿈을 인쇄합니다 .

관련 정보