링크의 http 소스에서 링크 부분만 가져오는 방법은 무엇입니까?
나는 가지고있다
<a href="http://unix.stackexchange.com/users/20661/">Unix & Linux
그리고 그냥 얻고 싶어
http://unix.stackexchange.com/users/20661/
나는 노력했다
sed 's/^.*(http.*)".*$/\1/g'
하지만 이렇게 하면 오류가 발생합니다.
sed: -e expression #1, char 22: invalid reference \1 on `s' command's RHS
답변1
이 시도:
sed -r 's/.*(http[^"]*)".*/\1/g'
Mac OSX에서는 다음을 시도해 보세요.
sed -E 's/.*(http[^"]*)".*/\1/g'
노트
sed
이 명령에 대해 주의해야 할 몇 가지 사항이 있습니다.
sed 's/^.*(http.*)".*$/\1/g'
이것은
^
불필요합니다. sed의 정규식은 항상 다음과 같습니다.탐욕스러운. 즉.*
, 정규 표현식이 match로 시작하면 항상 줄의 시작 부분부터 일치합니다.그룹화 문자 로 만들려면
(
이스케이프하거나 플래그를 사용하여 확장 정규식을 켤 수 있습니다-r
(-E
OSX의 경우). 이 플래그는 일반적으로 필요한 이스케이프 횟수를 크게 줄여줍니다.또한 정규식은 욕심이 많기 때문에
(http.*)"
줄의 첫 번째 큰따옴표가 아닌 마지막 큰따옴표와 일치합니다. 그러나 URL은 첫 번째 큰따옴표로 끝납니다. 대조적으로, use(http[^"]*)"
와 match 는 결코 첫 번째 것 이상으로 진행되지 않습니다"
.USD 로그인
.*$
도 중복됩니다. 또한 정규식은 욕심이 많기 때문에 정규식을 match 로 끝내면.*
줄 끝까지 일치합니다.
답변2
탈출구가 누락되었습니다.
sed 's/^.*\(http.*\)".*$/\1/g'
()
(누가 기대했는지 , 누가 기대하지 않았는지 기억이 나지 않습니다 \(\)
.)
답변3
사용 awk
:
echo '<a href="http://unix.stackexchange.com/users/20661/">Unix & Linux' \
| awk -F\" '{print $2}'
http://unix.stackexchange.com/users/20661/