
삽입이 필요한 파일이 있습니다. 삽입은 파일의 기존 문자열에 따라 달라지며 해당 파일의 키워드를 사용하여 식별할 수 있습니다. 삽입 자체는 특정 줄을 따라야 합니다. 제 예에서는 "/여기/" . 저는 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
명령에는 두 가지 주요 표현식이 포함되어 있습니다.
KEY...something...()
일치하는 행이 발견되면 첫 번째 항목이 실행됩니다. 그런 다음 현재 줄을 예약된 공간에 저장하고 문자열 앞의 비트를 미리 결정된 들여쓰기로 바꾼 다음h
괄호 앞에 비트를 추가합니다. 그러면 나중에 삽입할 행이 생성됩니다. 그런 다음 예약된 공간과 편집 버퍼가 교체되어 수정되지 않은 원본 줄이 출력됩니다.KEY
_Addon
x
- 행이 일치하면
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*/
위의 코드는 문자열이 들여쓰기된 공백과 탭 수에 관계없이 들여쓰기된 줄바꿈을 인쇄합니다 .