Извлечь часть строки с регулярным выражением

I есть файл, который состоит из таких строк:

50.57.61.8 - - [04/Apr/2019:09:52:01 -0400] "GET /tracker.php?q=1&p=2 HTTP/1.1" 302 20 "-" "Rackspace Monitoring/1.1 (https://monitoring.api.rackspacecloud.com)"
50.57.61.9 - - [04/Apr/2019:09:52:01 -0400] "GET /tracker.php?q=1&p=2 HTTP/1.1" 302 20 "-" "Rackspace Monitoring/1.1 (https://monitoring.api.rackspacecloud.com)"

Теперь я хочу получить вывод, например:

50.57.61.8 - - [04/Apr/2019:09:52:01 -0400] "GET /tracker.php?q=1&p=2 HTTP/1.1" 
50.57.61.9 - - [04/Apr/2019:09:52:01 -0400] "GET /tracker.php?q=1&p=2 HTTP/1.1"

Как мы можем добиться этого с помощью команды linux (grep/cut ... и т. д.)?

0
04.05.2019, 21:56
1 ответ

По крайней мере, с этими данными(*):

С помощью cutвозьмите первые восемь полей, разделенных пробелом -:

$ cut -d' ' -f1-8 < someinputfile 
50.57.61.8 - - [04/Apr/2019:09:52:01 -0400] "GET /tracker.php?q=1&p=2 HTTP/1.1"
50.57.61.9 - - [04/Apr/2019:09:52:01 -0400] "GET /tracker.php?q=1&p=2 HTTP/1.1"

С помощью sedиспользуйте s///и регулярное выражение, чтобы удалить первую двойную кавычку, за которой следует пробел, и все после нее (и вернуть кавычку):

$ sed -e 's/".*/"/' < someinputfile 
50.57.61.8 - - [04/Apr/2019:09:52:01 -0400] "GET /tracker.php?q=1&p=2 HTTP/1.1"
50.57.61.9 - - [04/Apr/2019:09:52:01 -0400] "GET /tracker.php?q=1&p=2 HTTP/1.1"

(*то есть это похоже на файл журнала Apache, но я не могу вспомнить все варианты точного формата, поэтому я могу делать предположения.)

1
28.01.2020, 02:40

Теги

Похожие вопросы