我有一个包含多行 URL 的文件。有些 URL 我对处理或查看不感兴趣,并希望忽略它们。我只想要除它们之外的其他内容作为输出显示。
这是我到目前为止的命令:
grep 'http://' data.txt | sed 's/.*\(http:.*\)\".*/\1/'
我想排除包含以下内容的网址:
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>)"