如何使用sed和regex提取字段

时间:2012-06-12 16:51:21

标签: regex sed

我的输入看起来像这样:

[03/Jun/applications/somejunk/morejunk/ 200

我想用sed + regex以形式提取它:

03/Jun 200

这是我正在尝试的正则表达式,但我无法弄清楚如何提取我想要的东西。

\([0-9]{2}/[a-zA-Z]{3}/\).* \([0-9]{3}\)

任何帮助都会很棒。这是我的测试代码:

$ echo "[03/Jun/applications/somejunk/morejunk/ 200" | sed 's,\\([0-9]{2}/[a-zA-Z]{3}/\\).* \\([0-9]{3}\\),\1 \2,g'

2 个答案:

答案 0 :(得分:1)

这是有效的

sed 's;\[\([0-9]\{2\}/[a-zA-Z]\{3\}\)[^ ]*\(.*\);\1\2;'

$ echo "[03/Jun/applications/somejunk/morejunk/ 200" | sed 's;\[\([0-9]\{2\}/[a-zA-Z]\{3\}\)[^ ]*\(.*\);\1\2;'
03/Jun 200

匹配2位[0-9]\{2\}
匹配单个斜杠/
匹配3个字母[a-zA-Z]\{3\}
将它们分组到\1 - 这是括号括起来的 匹配任何内容直到空格[^ ]*
匹配空间后的所有内容(包括空格)并将其保存在\2中 返回\1\2
\2已包含空格

答案 1 :(得分:0)

尝试以下方法:

sed 's,.\([0-9]\{2\}/[a-zA-Z]\{3\}\)/.* \([0-9]\{3\}\),\1 \2,'

示例:

$ echo "[03/Jun/applications/somejunk/morejunk/ 200" | sed 's,.\([0-9]\{2\}/[a-zA-Z]\{3\}\)/.* \([0-9]\{3\}\),\1 \2,'
03/Jun 200