특정 내용 아래에 새 줄을 추가 할 수 있습니까 sed
? 입력 내용이 있으면 그대로 두시겠습니까?
파일의 현재 내용ssss
Hostname example.com
Os version rhel5.6
apache 4.2
Hostname example2.com
Os version rhel5.6
원하는 파일 내용ssss
Hostname example.com
Os version rhel5.6
apache 4.2
Hostname example2.com
Os version rhel5.6
apache 4.2
아래 명령을 사용하여 콘텐츠를 추가할 수 있습니다.
sed -i '/Os version rhel5.6/a apache 4.2' ssss
내 질문
콘텐츠가 파일에 존재하는 경우 지정된 콘텐츠 아래에 줄을 추가하고 그대로 두고 싶습니다. 콘텐츠가 존재하지 않으면 추가하세요.
답변1
이 perl
표현이 효과가 있을 것입니다.
perl -i -ne 'next if /apache 4.2/;s+Os version rhel5.6+Os version rhel5.6\napache 4.2+; print' ssss
설명
next if /apache 4.2/
일치하는 모든 줄을 건너뜁니다apache 4.2
.s+Os version rhel5.6+Os version rhel5.6\napache 4.2+; print
줄 바꿈에 추가하여 줄을 검색Os version rhel5.6
하고 동일하게 바꿉니다apache 4.2
.
입력 파일로 테스트
$ cat ssss
Hostname example.com
Os version rhel5.6
apache 4.2
Hostname example2.com
Os version rhel5.6
$ perl -ne 'next if /apache 4.2/;s+Os version rhel5.6+Os version rhel5.6\napache 4.2+; print' ssss
Hostname example.com
Os version rhel5.6
apache 4.2
Hostname example2.com
Os version rhel5.6
apache 4.2
답변2
이를 수행하는 한 가지 방법은 다음과 같습니다 sed
.
sed '/Os version rhel5\.6/{
a\
apache 4.2
$!{
n
/^apache 4\.2$/d
}
}' infile
이는 apache 4.2
일치하는 모든 줄에 무조건 추가한 Os version rhel5.6
다음(마지막 줄이 아닌 경우) n
패턴 공간 인쇄를 통해 다음 줄을 가져오고 새 패턴 공간 내용이 일치하면 apache 4.2
삭제합니다. 선행/후행 공백을 포함하도록 필요한 경우 정규식을 조정합니다. 예:/^[[:blank:]]*apache 4\.2[[:blank:]]*$/d