텍스트 문자열 앞의 모든 항목을 찾아 바꾸기

텍스트 문자열 앞의 모든 항목을 찾아 바꾸기

나는 많은 IP 주소 목록(주로 IPv4, 일부 IPv6) 뒤에 공백, 도메인 이름, 또 다른 공백이 있고 "www"가 포함된 동일한 도메인 이름이 있습니다. 그 앞에. 각 인스턴스는 자체 라인에 있습니다. 목록은 다음과 같습니다(하지만 훨씬 더 크다):

23.212.109.137 at.ask.com www.at.ask.com
216.58.206.74 maps.googleapis.com www.maps.googleapis.com
2400:cb00:2048:1::6812:32a5 litscape.com www.litscape.com
104.16.244.35 loc.gov www.loc.gov
216.70.104.235 mbu.edu www.mbu.edu

두 개의 찾기 및 바꾸기 명령이 궁금합니다. 각 명령은 마지막 명령 다음에 다른 텍스트 파일을 생성합니다.

1) 첫 번째 명령은 찾아서 바꿔야 합니다.모든 것"www" 앞에. "http://"를 사용하면 두 번째 텍스트 파일의 줄이 다음과 같이 표시됩니다.

http://www.at.ask.com
http://www.maps.googleapis.com
http://www.litscape.com
http://www.loc.gov
http://www.mbu.edu

2) 두 번째 명령은 "의 모든 인스턴스를 찾아서 바꿔야 합니다.http://www."를 두 번째 텍스트 파일에 추가하여 세 번째 텍스트 파일의 줄이 다음과 같도록 합니다.

at.ask.com
maps.googleapis.com
litscape.com
loc.gov
mbu.edu

감사해요.

답변1

싱글로주문하다:

awk '{ print $2 > "domains.txt"; print "http://"$3 > "domains_http.txt" }' file

결과:

> cat domains_http.txt 
http://www.at.ask.com
http://www.maps.googleapis.com
http://www.litscape.com
http://www.loc.gov
http://www.mbu.edu

> cat domains.txt 
at.ask.com
maps.googleapis.com
litscape.com
loc.gov
mbu.edu

답변2

두 번째는 가장 간단합니다.

$ cut -d ' ' -f 2 file.in

공백을 구분 기호로 사용 cut하고 두 번째 열을 자릅니다.

이를 통해 awk다음 두 가지 작업을 쉽게 수행할 수 있습니다.

$ awk '{ print $2 }' file.in

이는 기본적으로 명령과 동일한 작업을 수행합니다 cut.

$ awk '{ print "http://" $3 }' file.in

이는 세 번째 열을 가져와 http://출력하기 전에 앞에 추가합니다.

답변3

sed를 사용하세요:

sed 's#.*\(www.*\)#http://\1#' source_file > dest_file1
sed 's#.*www\.\(.*\)#\1#' dest_file1 > dest_file2

설명하다:

첫 번째 요구 사항의 경우 모든 항목을 그룹화 www하고 해당 그룹에 속하지 않는 모든 항목을 바꿉니다 http://. 두 번째 파일은 유사하지만 이제 뒤에서 그룹화되었습니다.www.

원하시는 분들은 참고해주세요주문하다이러한 작업을 수행하려면 언제든지 해당 작업을 사용자 정의 명령으로 별칭을 지정할 수 있습니다.

관련 정보