를 사용하지 않는 매우 간단한 한 줄 SED 명령을 작성하려고 합니다 bash conditions
.
비슷한 작업을 수행하지만 파일 끝에 추가하는 SED 명령의 경우 다음을 사용합니다.
sed -n -e '/.*MYLINE.*/!p' -e '$aVAR=MYLINE' -i /path/to/file
하지만 이번에는 줄이 삽입되는 위치가 중요하므로 특정 문자열 뒤에 있어야 합니다. 나는 다음을 시도했다:
sed -n -e '/.*MYLINE.*/!p' -e t -i '/^ANOTHER_PATTERN.*/aVAR=MYLINE' /path/to/file
그래서 나는 /path/to/file
이것으로부터 피벗 할 수 있습니다
...
ANOTHER_PATTERN=SOMETHING
...
아니면 이거
...
ANOTHER_PATTERN=SOMETHING
VAR=OTHERS MYLINE
...
이것을 생산하기 위해
...
ANOTHER_PATTERN=SOMETHING
VAR=MYLINE
...
그러나 기대했던 결과를 얻지 못했습니다. 인터넷 검색을 시도했지만 소용이 없었습니다.
패턴이 있는 경우 올바르게 검색한 다음 전체 줄을 바꾸는 방법, 그렇지 않으면 SED를 사용하여 다른 패턴 뒤에 새 줄을 삽입하는 방법은 무엇입니까?
답변1
sed -e '/MYLINE/d' -e '/^ANOTHER_PATTERN/a\
VAR=MYLINE' file
줄에 패턴이 포함되어 있으면 패턴이 제거되고 패턴으로 시작하는 줄에 MYLINE
해당 줄이 추가됩니다 . 파일을 제자리에서 편집하는 옵션을 추가합니다 ( 구현에서 지원하는 경우).VAR=MYLINE
ANOTHER_PATTERN
-i
sed
답변2
사용 awk
:
awk '/MYLINE/{next};
/^ANOTHER_PATTERN/{$0 = $0 ORS "VAR=MYLINE";}1' input
표현 후에는 추가 작업이 수행되지 않습니다 /MYLINE/{next}
. 실제로 awk
이는 s 1 인쇄 관용구를 사용할 때 레코드가 인쇄되는 것을 방지합니다. 다른 패턴이 발견되면 현재 입력 레코드( ) 는 개행 문자 다음에 가 오도록 $0
변경됩니다 .$0
VAR=MYLINE