0

我的输入如下所示:

[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'
4

2 回答 2

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已经包含一个空格

于 2012-06-12T16:56:05.143 回答
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
于 2012-06-12T17:00:18.840 回答