패턴이 있는 줄 끝에 패턴과 결합된 일부 문자열을 추가하는 방법

패턴이 있는 줄 끝에 패턴과 결합된 일부 문자열을 추가하는 방법

/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는 비탐욕적 일치를 지원하지 않으므로 이 정규식은 작동하지 않습니다.

관련 정보