一致するURLを1行で見つけてドメイン名に減らします。

一致するURLを1行で見つけてドメイン名に減らします。

スクリプトを作成しているログファイルがあるため、出力の特定のフィールドのみが表示されます。最後に必要なのは、「.com」、「.edu」、「.org」などを打ったときに行が停止するようにURLを減らすことです。 grepを使ってこれを行う方法はありますか?見つける必要がある他のコマンドはありますか?

出力例は次のとおりです。

student1234 "GET https://www.noname.com:443/login"
student4567 "GET http:// www.noip.edu:80/start/noname"
student8901 "GET http:// www.testing.org:80/search/change"

私に必要なのは:

student1234 "GET https://www.noname.com
student4567 "GET http:// www.noip.edu
student8901 "GET http:// www.testing.org

ベストアンサー1

選択の余地が多いので、好きなものを選択してください。

使用grep:

grep -o '^[^:]\+:[^:]\+' file.txt

使用cut:

cut -d: -f1-2 file.txt

使用awk:

awk -F: '{ print $1$2 }' file.txt

使用sed:

sed 's/^\([^:]\+:[^:]\+\).*/\1/' file.txt

シェルの使用:

while IFS=: read -r i j k; do echo "$i$j"; done <file.txt

使用perl:

perl -pe 's/^([^:]+:[^:]+).*/$1/' file.txt

例:

$ grep -o '^[^:]\+:[^:]\+' file.txt
student1234 "GET https://www.noname.com
student4567 "GET http:// www.noip.edu
student8901 "GET http:// www.testing.org

$ cut -d: -f1-2 file.txt                                                
student1234 "GET https://www.noname.com
student4567 "GET http:// www.noip.edu
student8901 "GET http:// www.testing.org

$ awk -F: '{ print $1$2 }' file.txt                 
student1234 "GET https//www.noname.com
student4567 "GET http// www.noip.edu
student8901 "GET http// www.testing.org

$ sed 's/^\([^:]\+:[^:]\+\).*/\1/' file.txt            
student1234 "GET https://www.noname.com
student4567 "GET http:// www.noip.edu
student8901 "GET http:// www.testing.org

$ while IFS=: read -r i j k; do echo "$i$j"; done <file.txt
student1234 "GET https//www.noname.com
student4567 "GET http// www.noip.edu
student8901 "GET http// www.testing.org

$ perl -pe 's/^([^:]+:[^:]+).*/$1/' file.txt
student1234 "GET https://www.noname.com
student4567 "GET http:// www.noip.edu
student8901 "GET http:// www.testing.org

おすすめ記事