특정 패턴을 제외한 모든 패턴을 제거하려면 sed를 사용하십시오.

특정 패턴을 제외한 모든 패턴을 제거하려면 sed를 사용하십시오.

링크의 http 소스에서 링크 부분만 가져오는 방법은 무엇입니까?

나는 가지고있다

<a href="http://unix.stackexchange.com/users/20661/">Unix &amp; 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'
  1. 이것은 ^불필요합니다. sed의 정규식은 항상 다음과 같습니다.탐욕스러운. 즉 .*, 정규 표현식이 match로 시작하면 항상 줄의 시작 부분부터 일치합니다.

  2. 그룹화 문자 로 만들려면 (이스케이프하거나 플래그를 사용하여 확장 정규식을 켤 수 있습니다 -r( -EOSX의 경우). 이 플래그는 일반적으로 필요한 이스케이프 횟수를 크게 줄여줍니다.

  3. 또한 정규식은 욕심이 많기 때문에 (http.*)"줄의 첫 번째 큰따옴표가 아닌 마지막 큰따옴표와 일치합니다. 그러나 URL은 첫 번째 큰따옴표로 끝납니다. 대조적으로, use (http[^"]*)"와 match 는 결코 첫 번째 것 이상으로 진행되지 않습니다 ".

  4. 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/

관련 정보