줄 기반이고 바꿀 줄이 하나 뿐인 경우을 사용하여 파일 자체를 교체 줄 앞에 추가하고 printf
첫 번째 줄을 sed
보류 공간 에 저장하고 필요에 따라 삭제하는 것이 좋습니다. 이렇게하면 특수 문자에 대해 전혀 걱정할 필요가 없습니다. (여기서 유일한 가정은 $VAR
줄 바꿈없이 한 줄의 텍스트 를 포함 한다는 것입니다 . 이미 주석에서 말한 내용입니다.) 줄 바꿈 외에 VAR은 무엇이든 포함 할 수 있으며 관계없이 작동합니다.
VAR=whatever
{ printf '%s\n' "$VAR";cat somefile; } | sed '1{h;d;};/KEYWORD/g'
printf '%s\n'
내용에 $VAR
관계없이 리터럴 문자열로 내용을 인쇄 한 다음 줄 바꿈을합니다. ( echo
예를 들어 $VAR
하이픈 으로 시작 하는 내용과 같은 경우에는 다른 작업을 수행 합니다 echo
. 에 전달되는 옵션 플래그로 해석됩니다 .)
중괄호는 출력 printf
내용이에 somefile
전달 될 때 내용 앞에 추가하는 데 사용 됩니다 sed
. 닫는 중괄호 앞의 세미콜론과 마찬가지로 중괄호 자체를 분리하는 공백이 중요합니다.
1{h;d;};
A와 sed
명령은 텍스트의 첫 줄을 저장할 sed
의 보류 공간 , 후 d
(오히려 인쇄보다는) 라인을 elete.
/KEYWORD/
를 포함하는 모든 행에 다음 조치를 적용합니다 KEYWORD
. 동작은 g
기타로, 홀드 공간의 내용을 가져 와서 패턴 공간 대신 , 즉 현재 행 전체를 삭제합니다. (이것은 라인의 일부만 교체하기위한 것이 아닙니다 .) 보류 공간은 비워지지 않으며 패턴 공간으로 복사 되어 존재하는 모든 것을 대체합니다.
정규식 을 고정 하여 KEYWORD 만 포함 하는 줄과 일치하지 않고 KEYWORD 이외의 줄에 아무것도없는 줄만 일치 시키려면 줄의 시작 부분 앵커 ( ^
)와 줄의 끝 앵커 ( $
)를 정규식 :
VAR=whatever
{ printf '%s\n' "$VAR";cat somefile; } | sed '1{h;d;};/^KEYWORD$/g'
sed
하지 않으 려면 백 슬래시를 이스케이프 처리하십시오.VAR='hi\/'
그런 문제는 없습니다.