如何使用正则表达式提取数据?

时间:2013-04-12 11:45:35

标签: grep

  

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是一个很好的方法,但我想把它放在一个不仅仅是打印的表中

1 个答案:

答案 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

相关问题