我想使用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
答案 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
。