나에겐 이 두 가지가 있다
http://www.example.com:8888/index.php
http://home.example.com:8888/index.php
( home
무엇이든 될 수 있지만 www
)
그리고 이것을 얻고 싶습니다 :
example.com
home.example.com
1년 후에 어떻게 작동하는지 이해할 수 있도록 읽을 수 있는 방식으로 하는 것이 좋습니다.
내 시도는 다음과 같습니다.
echo http://www.example.com:8888/index.php | awk -F[/:\'www\'] '{print $7}'
하지만 결과는
.example.com
(주의) www.example.com에 적용시
home.example.com
사용할 수 있다면 print $4
두 경우 모두 동일한 인쇄 절을 사용하는 것을 선호합니다.
감사해요.
답변1
sed
해결책:
sed -E 's~http://(www\.)?([^:]+).*~\2~' file
~
-sed
하위 명령 구분 기호 로 처리됩니다.-E
- 확장 정규식 허용(www\.)?
- 옵션www.
부품 일치([^:]+)
- 다음을 제외한 모든 문자 시퀀스와 일치합니다.:
산출:
example.com
home.example.com
답변2
세 단계:
://
URL까지 포함하여 모든 항목을 제거합니다.- 첫 번째 문자열 뒤
/
또는 나머지 문자열 뒤의:
모든 항목을 제거합니다. 이제 원래 URL의 호스트 이름만 남았습니다. www.
호스트 이름의 시작 부분 과 같이 필요하지 않은 부분을 제거하십시오 .
sed -e 's@^.*://@@' -e 's/[/:].*$//' -e 's/^www\.//'
예제 URL에서 이 명령을 실행하면 다음이 생성됩니다.
example.com
home.example.com
사용 awk
:
awk -F'[/:]+' '{ sub("^www\.", "", $2); print $2 }'
:
이는 입력 행을 임의 개수의 연속 또는 구분된 필드 레코드로 구성된 것으로 처리합니다 /
. 이는 각 행의 두 번째 필드에서 호스트 이름을 사용할 수 있음을 의미합니다.
이렇게 sub()
하면 관심이 없는 호스트 이름 부분(여기서는 www.
호스트 이름 시작 부분)이 제거됩니다.
답변3
GNU awk 및 해당 필드 패턴 정의 사용 FPAT
:
awk -v FPAT='([^/]+\\.)+[^:/]+' '{print $1}'
/
필드 패턴은 다음 점을 제외한 일련의 문자로 설정되며 .
, 또는 로 :
끝나야 합니다 /
.
URL에는 다소 느슨할 수 있지만 포트 번호가 있거나 없는 FQDN을 캡처할 수 있습니다.