2013-05-11 2 views
1

셸/bash 스크립트로 URL에서 URL을 추출하려면 문자열에 둘 이상의 URL이있는 경우 첫 번째 URL 만 반환해야합니다.쉘에서 문자열에서 URL을 검색하는 방법은 무엇입니까?

아래 입력 및 출력 문자열 예제를 제공했습니다. 내가 정규식을해야 할 것 같아요,하지만 난 너무 배쉬/쉘 에서이 일을하는 방법에 익숙하지 않아?

Input: Take a look at this site: http://www.google.com/ and you'll find your answer 
Output: http://www.google.com/ 


Input: http://www.google.com 
Output: http://www.google.com 


Input: Check out http://www.bing.com and http://www.google.com 
Output: http://www.bing.com 


Input: Grettings, visit <http://www.mywebsite.com> today! 
Output: http://www.mywebsite.com 
+2

당신이 해결하려고했던 것도 있나요 이 문제? 지금까지 시도한 바를 알려 주시면 질문에 대한 답변을 기꺼이 보내 드리겠습니다. (더 나은 질문을하는 데 도움이되는 링크 : [ask], [FAQ] – Doorknob

+0

나는 그것에 대해 생각해 보았으므로 나는 동의한다. 하지만 Google에서 검색하려고했지만 정확한 답변을 찾지 못했습니다. 나는 bash 나 정규 표현식에 너무 익숙하지 않아서 최고의 콤보가 아니다. 그러나 나는 더 많은 것을 사전에 조사 했어야했다. – user1015149

답변

2

이 시도 : 예를 들어

grep -Eo 'http://[^ >]+' yourFile|head -1 

:

kent$ echo "Check out http://www.bing.com and http://www.google.com"|grep -Eo 'http://[^ >]+'|head -1 
http://www.bing.com 
kent$ echo "Grettings, visit <http://www.mywebsite.com> today"|grep -Eo 'http://[^ >]+'|head -1 
http://www.mywebsite.com 
+0

감사합니다. 이것은 매력처럼 작동하는 것 같습니다! 나는이 물마루를 스스로 시험해보고 싶습니다. 왜 작동하는지 알고 싶습니다. grep을 사용하면 기본적으로 각 행을 검색하고 일치하는 행을 모두 반환합니다. -o 플래그가 사용 가능하므로 전체 행 대신에 일치하는 부분 만 리턴됩니다. -e를 사용하면 grep이 확장 된 정규 표현식을 사용하고 egrep처럼 작동합니다. 특별한 이유로 당신은 egrep을 사용하지 않았습니까? 'http : //는 http : //로 시작해야 함을 의미합니다. 하지만 [^>] + 나는 완전히 이해하지 못합니다. | head -1은 첫 번째 만 반환하도록 만듭니다. – user1015149

+0

좀 더 읽고 [^]는 대괄호 안에 들어 있지 않은 문자와 일치한다는 것을 의미합니다. 이후>와 공백이 [] 안에있는 경우 패턴 일치는 공백이나 문자열의> 문자를 만나면 "중지"됩니다. 그 다음에 +는 스페이스 나>를 칠 때까지 반복됩니다. 내가 이것을 정확하게 이해 했는가? – user1015149

+1

'+'를'\ +'로 바꾸면'-E'는 필요 없습니다. '[^>] +는 (공백) 또는'>'(한 번 또는 여러 번) 인 모든 문자를 의미합니다. URL 바로 다음에 ''이 있으면'\ t '를 추가하거나 grep이'-P'를 지원한다면'-P 'http : // [^ \ s>] +''를 사용하십시오. 또한'https : // url'이 있기 때문에'https? // ....'로 바꿀 수 있습니다 – Kent

1

사용 예를 들어 grep 명령 :

cat yourinput.txt | grep "your_regex_here" 
+0

그의 질문은 "your_regex_here"부분에 관한 것입니다. 'cat'도 필요 없습니다. – Kent

+0

"cat is not necessary"즉 : 마지막 인수 인 grep으로 파일 이름을 넣을 수 있습니다. –

관련 문제