/etc/hosts 파일의 패턴과 일치하는 각 줄 끝에 .com을 추가하고 싶습니다.
샘플 파일 내용:
127.0.0.1 localhost
1.2.3.4 hostname1 hostname1.xyz hostname1.xyz.
1.2.3.5 hostname2 hostname2.xyz hostname2.xyz.
1.2.3.6 hostname3 hostname3.xyz hostname3.xyz.
나는 그것이 다음과 같이 보이기를 원합니다 :
127.0.0.1 localhost localhost.com
1.2.3.4 hostname1 hostname1.xyz hostname1.xyz. hostname1.xyz.com
1.2.3.5 hostname2 hostname2.xyz hostname2.xyz. hostname2.xyz.com
1.2.3.6 hostname3 hostname3.xyz hostname3.xyz. hostname3.xyz.com
이 효과를 얻을 수 있는 sed
명령 이 있습니까 ?awk
답변1
그리고 awk
:
$ awk '$0 = $0 " " $NF ($NF ~ /\.$/ ? "" : ".") "com"' <file
127.0.0.1 localhost localhost.com
1.2.3.4 hostname1 hostname1.xyz hostname1.xyz. hostname1.xyz.com
1.2.3.5 hostname2 hostname2.xyz hostname2.xyz. hostname2.xyz.com
1.2.3.6 hostname3 hostname3.xyz hostname3.xyz. hostname3.xyz.com
답변2
내부 편집을 위해 Perl을 사용하는 솔루션
perl -i -pe 's/(\s\S+?)(\.?)\s*$/$1$2$1.com\n/' /etc/hosts
\s
공백 문자 일치\S+?
탐욕스럽지 않은 일치는 공백이 아닌 문자 1개 이상과 일치합니다.\.?
Greedy는 0번 또는 1번 일치합니다. 문자(줄 끝에 가능한 추가 . 를 처리하기 위해)\s*$
줄 끝의 모든 공백 문자와 일치합니다.$1$2
후행 공백 문자를 제외하고 마지막 열 유지$1.com\n
.com 및 개행 문자 추가
원본 파일(/etc/hosts.bkp)을 백업하도록 -i
변경 합니다 .-i.bkp
sed
참고: BRE/ERE는 비탐욕적 일치를 지원하지 않으므로 이 정규식은 작동하지 않습니다.