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のみを含む行を印刷しました。

1行に1つの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

yahoo2番目は、その単語を含むすべてのURLを提供します。

部分 URL を除くすべての URL を抽出するために使用されます。

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

関連情報