多数のURLを含む出力ファイルがあるとします。 awkまたはsedを使用してURLの一部を削除して最終結果をhttp://example.com
取得http://example.com/folder/file.html
。
答え1
最初のシングル(ダブルではない)以降のすべてのアイテムを削除するには、次の手順を実行します/
。
sed -r 's#([^/])/[^/].*#\1#'
この式はs#([^/])/[^/].*#\1#
正規表現を使用して置換を実行します([^/])/[^/].*
。これは/
、単一文字/
(および入力行の末尾にある他の文字)が後に来ないすべての文字と一致します。
置換は、一致する項目を単一文字の前の文字/
(それ以外の場合は置換)に置き換えます。
ファイルでテストしてみてください
http://example.com/folder/file.html
http://example.bar.com/folder/file.html
http://example.com:8080/folder/file.html
$ sed -r 's#([^/])/[^/].*#\1#' file
http://example.com
http://example.bar.com
http://example.com:8080
使用awk
:
$ awk -F'/' '{ print $1 "//" $3 }' file
http://example.com
http://example.bar.com
http://example.com:8080
ここでは、フィールド区切り文字として使用/
し、最初と3番目のフィールドを選択し、//
それらの間の文字列を使用して出力します。
答え2
あなたが使用できるsed
:
sed 's#^\(https\?://\)\?\([^/]*\)/.*#\1\2#' filename
このコマンドと次のファイルを使用します。
http://example.com/foo/bar.html
https://example.com/foo/bar.html
example.com/foo/bar.html
出力は次のとおりです
http://example.com
https://example.com
example.com
仕組みは次のとおりです。
\(https\?://\)\?
http://
またはの最大1つの発生と一致しますhttps://
。角かっこは一致をキャプチャします。\1
\([^/]*\)
この後から次まで一致し、一致/
は次からキャプチャされます。\2
/.*
残りの行と一致します。
答え3
sed
URLが1行に1つずつあるか、スペースで区切られていると想定してURLの末尾の部分を削除するために使用されます。
sed 's!\(http://[^/]*\)[^ ]*!\1!g' < input > output
これはsedの検索と置換機能を使用します。パターン、置換、およびフラグ間の区切り記号はここで設定されます!
。
一致させるパターンは次のとおりです。
http://
スラッシュを除くすべての項目 - パターンのこの部分は括弧内に「グループ1」として表示されます。- (スペースを除くすべての項目)、0回以上 - これは特にURLの末尾の部分です。いいえかっこ内にキャプチャ
代替案は次のとおりです。
- 以前にキャプチャした「グループ1」
フラグは次のとおりです
- グローバルに行います
g
。つまり、1行にできるだけ何度も実行します。
答え4
大容量ファイルの場合、ジョブはgrep
すばやく完了する可能性があります。構文も覚えやすいです。
grep -Eo '^https?://[^/]+' fname
使用sed
には異常は必要ありません。
sed -r 's|(https?://[^/]*).*|\1|' fname
またはcut
難しい正規表現を使用しないでください
cut -d'/' -f1,2,3 fname