여러 줄의 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
grep
with 옵션을 사용하면 -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
질문 업데이트 후:
이 상황에서는 다음 방법 중 하나를 사용할 수 있습니다.
grep 'http://www.yahoo' data.txt | sed 's/.*\(http:.*\)/\1/'
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>)"