複数行の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
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
2番目は、その単語を含むすべてのURLを提供します。
部分 URL を除くすべての URL を抽出するために使用されます。
grep 'http://' data.txt | sed 's/.*\(http:.*\)/\1/' | grep -vE "(openxmlformats|<Another URL to exclude>)"