Файл содержит такие строки:
1363650803.076 48 192.168.20.58 TCP_MISS/417 1963 POST http://collector-4.newrelic.com/agent_listener/invoke_raw_method? - NONE/- text/html
1363650863.426 0 192.168.20.58 TCP_MISS/417 1963 POST http://collector-4.newrelic.com/agent_listener/invoke_raw_method? - NONE/- text/html
1363650898.698 63995 192.168.20.61 TCP_MISS/000 0 GET http://65.55.122.235/2.0/blugro5relay.groove.microsoft.com/p9xyqk93z98qti59r7taftbcxe3s6rt52n4drjs,ConnType=LongLived,ContentLength=2147479552 - DIRECT/65.55.122.235 -
1363650898.698 63995 192.168.20.61 TCP_MISS/000 0 POST http://65.55.122.235/2.0/blugro5relay.groove.microsoft.com/p9xyqk93z98qti59r7taftbcxe3s6rt52n4drjs,ConnType=LongLived - DIRECT/65.55.122.235 -
1363650899.199 63991 192.168.20.61 TCP_MISS/000 0 GET http://65.55.122.235/2.0/blugro5relay.groove.microsoft.com/xatanmtq99upj97qtps89zqnx99wqsyeuc5yefa,ConnType=KeepAlive - DIRECT/65.55.122.235 -
1363650899.199 63991 192.168.20.61 TCP_MISS/000 0 POST http://65.55.122.235/2.0/blugro5relay.groove.microsoft.com/xatanmtq99upj97qtps89zqnx99wqsyeuc5yefa,ConnType=KeepAlive - DIRECT/65.55.122.235 -
Я хочу получить имена хостов / IP-адреса из каждой строки.
Что не так с этой командой sed?
sed -rn "s@//([^/]+)/@\1@" access.log
1
boatcoder
21 Мар 2013 в 22:06
1 ответ
Лучший ответ
Во-первых, -n
избегает печати каждой строки. Убери это.
Во-вторых, сопоставьте всю строку и замените все сгруппированным содержимым.
В-третьих, добавьте http:
непосредственно перед //
для более точного совпадения.
Это было бы так:
sed -r "s@^.*http://([^/]+).*@\1@" infile
Это дает:
collector-4.newrelic.com
collector-4.newrelic.com
65.55.122.235
65.55.122.235
65.55.122.235
65.55.122.235
3
Birei
21 Мар 2013 в 22:13
Похожие вопросы
Новые вопросы
sed
sed — это редактор командной строки для сред POSIX. Он обрабатывает один или несколько файлов в соответствии со сценарием редактирования и записывает результаты в стандартный вывод. Созданный в Bell Labs, он существует с середины 70-х годов.