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