crawl-66-249-64-13.hero.com - - [ 17 / Oct / 2004:04:40:15 +0100]“GET / rubbish.txt HTTP / 1.0“ 200 25 ” - “”Hero / 2.1 (+ http://www.Hero.com/rub.html)“
粗体位是我要提取的部分
我目前有
"^(.*) - .* \["
我在grep中使用正则表达式有没有任何想法?我正在使用bash脚本 我知道awk是一个很好的方法,但我想把它放在一个不仅仅是打印的表中
答案 0 :(得分:0)
#!/bin/sh
var='crawl-66-249-64-13.hero.com - - [17/Oct/2004:04:40:15 +0100] "GET /rubbish.txt HTTP/1.0" 200 25 "-" "Hero/2.1 (+http://www.Hero.com/rub.html)"'
echo "${var}" | \
sed -e 's/^\([-a-zA-Z0-9.]*\)\( - - \[\)\([A-Za-z0-9\/:]*\)\(.*GET \/\)\([A-Za-z0-9.]*\)\(.*" \)\([0-9]* [0-9]*\)\( .*\)/\1\t\3\t\5\t\7/g'
不漂亮,但有效:)
Output: crawl-66-249-64-13.hero.com 17/Oct/2004:04:40:15 rubbish.txt 200 25
基本上你必须把它分解成你想要的块,然后只输出你想要的。 sed命令中的“\ 1”将显示第一个匹配的部分。 \ t是在它们之间添加一个标签。改变你想要的东西。你想匹配8个块的项目..这就是为什么输出是\ 1 \ 3 \ 5 \ 7