使用SED过滤文件

时间:2017-12-14 11:25:00

标签: bash sed

我想使用SED过滤文件,只获取由3个数字和域名组成的ID(例如:google.com)。

原始档案:

<activity
            android:name=".app.ActivityMenu"
            android:label="@string/title_activity_menu"
            android:theme="@style/ThemeHideStatusbar" />

使用过的SED命令:451 [04/Jan/1997:03:35:55 +0100] http://www.netvibes.com 448 [04/Jan/1997:03:36:30 +0100] www.google.com:443 450 [04/Jan/1997:03:36:48 +0100] http://84.55.151.142:8080 452 [04/Jan/1997:03:36:51 +0100] http://127.0.0.1:9010 451 [04/Jan/1997:03:36:55 +0100] http://www.netvibes.com 453 [04/Jan/1997:03:37:10 +0100] api.del.icio.us:443 453 [04/Jan/1997:03:37:33 +0100] api.del.icio.us:443 448 [04/Jan/1997:03:37:34 +0100] www.google.com:443

当前输出:

sed -e 's/\[[^]]*\]//g' -e 's/http:\/\///g' -e 's/www.//g' -e 's/^.com//g' -e 's/:[0-9]*//g'

希望输出:

451  netvibes.com
448  google.com
450  84.55.151.142
452  127.0.0.1
451  netvibes.com
453  api.del.icio.us
453  api.del.icio.us
448  google.com

3 个答案:

答案 0 :(得分:3)

使用grep

sed ... | grep -F '.com'

sed ... | grep '\.com$'

或使用sed -n,使用p打印匹配

sed -ne 's/\[[^]]*\]//g;s/http:\/\///g;s/www.//g;s/:[0-9]*//g;/.com$/p'

答案 1 :(得分:1)

预计你的愿望输出中丢失了api.del.icio.us:

cat testfile | awk '{print $1" "$NF}' | sed -r 's/http\:\/\/*//g;s/www\.//g' | awk -F: '{print $1}' | sed -r 's/([0-9]{1,3}) [0-9].*/\1 /g' | sed -r 's/[0-9]{3} $//g' | grep -v '^$' | uniq

如果您只需要* .com域名,请获取:

cat testfile | awk'{print $ 1“”$ NF}'| sed -r's / http:// * // g; s / www .// g'| awk -F:'{print $ 1}'| sed -r's /([0-9] {1,3})[0-9]。* / \ 1 / g'| sed -r's / [0-9] {3} $ // g'| grep -v'^ $'| grep com | uniq的

答案 2 :(得分:1)

这是awk中的一个:

$ awk 'match($NF,/[^\.]+\.[a-z]+($|:)/) {
    print $1,substr($NF,RSTART,RLENGTH-($NF~/:[0-9]+/?1:0))
}' file
451 netvibes.com
448 google.com
451 netvibes.com
453 icio.us
453 icio.us
448 google.com

如果您只想要.com,请将[a-z]+正则表达式中的match替换为com