Bash - 특정 URL을 제외한 모든 URL 추출

Bash - 특정 URL을 제외한 모든 URL 추출

여러 줄의 URL이 포함된 파일이 있습니다. 처리하거나 보는 데 관심이 없고 무시하고 싶은 일부 URL이 있습니다. 나는 그 외에 다른 것이 출력으로 표시되기를 원합니다.

지금까지 내 명령은 다음과 같습니다.

grep 'http://' data.txt | sed 's/.*\(http:.*\)\".*/\1/'

다음을 포함하는 URL을 제외하고 싶습니다.

http://schemas.openxmlformats.org...

나는 이것에 익숙하지 않으며 어떤 도움이라도 진심으로 감사드립니다.

업데이트: 이것은 제가 작업 중인 파일입니다.

Relationships Xmlns             : http://schemas.openxmlformats.org/package/2006/relationships
Relationships Relationship Type : http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties
Style Sheet Xmlns               : http://schemas.openxmlformats.org/spreadsheetml/2006/main
Relationships Xmlns             : http://schemas.openxmlformats.org/package/2006/relationships
Relationships Relationship Type : http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings
Workbook Xmlns                  : http://schemas.openxmlformats.org/spreadsheetml/2006/main
Relationships Xmlns             : http://schemas.openxmlformats.org/package/2006/relationships
Relationships Relationship Type : http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink
Relationships Relationship Target: http://www.yahoo.com/
Worksheet Xmlns                 : http://schemas.openxmlformats.org/spreadsheetml/2006/main
Sst Xmlns                       : http://schemas.openxmlformats.org/spreadsheetml/2006/main
Types Xmlns                     : http://schemas.openxmlformats.org/package/2006/content-types
Properties Xmlns                : http://schemas.openxmlformats.org/officeDocument/2006/extended-properties

나는 원해요http://www.yahoo.com개별적으로 추출하고 Schemas.openxmlformats가 포함되어 있으므로 나머지는 무시합니다.

답변1

내 생각에는 sed만 사용하면 이 작업을 수행할 수 있다고 생각합니다.

sed -n '\,http://schemas.openxmlformats.org,!s/.*\(http:.*\).*/\1/p'
  • -n텍스트 자동 인쇄를 비활성화하여 선택한 줄만 인쇄합니다.
  • \,http://schemas.openxmlformats.org,!일치하지 않는 줄에서만 다음 명령을 실행하십시오(따라서 !끝에서) http://schemas.openxmlformats.org. 여기서는 정규식 구분 기호 ,로 not을 사용하고 있으므로 처음에는 이렇게 합니다. 이렇게 하면 패턴에서 탈출할 필요성이 줄어듭니다./\,\
  • 명령 은 s 귀하의 명령과 동일하지만 p그 이후에 해당 명령을 사용하여 이제 URL만 포함하는 행을 인쇄했습니다.

행당 하나의 URL만 있다고 가정합니다.

추가 따옴표를 제거하면 올바른 출력이 제공됩니다.

$ sed -n '\,http://schemas.openxmlformats.org,!s/.*\(http:.*\).*/\1/p' inpu-file
http://www.yahoo.com/

답변2

grepwith 옵션을 사용하면 -v일치하지 않는 행을 선택할 수 있습니다. 예를 들어, file.txt다음 내용을 포함하는 파일이 있다고 가정합니다.

first line
second line
third line
fourth text 

다음 명령을 사용하십시오.

grep "line" file.txt | grep -v "second"

결과는 다음과 같습니다:

first line
third line

동시에 여러 단어를 제외하려면 다음과 같은 정규식을 사용할 수 있습니다.

grep "line" file.txt | grep -vE "(second|first)"

결과는 다음과 같습니다:

    third line

질문 업데이트 후:

이 상황에서는 다음 방법 중 하나를 사용할 수 있습니다.

  1. grep 'http://www.yahoo' data.txt | sed 's/.*\(http:.*\)/\1/'
  2. grep 'http://' data.txt | sed 's/.*\(http:.*\)/\1/' | grep yahoo

첫 번째 방법은 당신에게만 제공됩니다 www.yahoo.

yahoo두 번째는 해당 단어가 포함된 모든 URL을 제공합니다.

부분 URL을 제외한 모든 URL을 추출하는 데 사용됩니다.

grep 'http://' data.txt | sed 's/.*\(http:.*\)/\1/' | grep -vE "(openxmlformats|<Another URL to exclude>)"

관련 정보