我的输入看起来像这样:
[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'
答案 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