这个命令怎么来
使用此命令
hadoop fs -ls -R /path/to/dir/d_20141123* | grep -oE '(.*)?\/(.*)\/'
我得到了这个输出
-rw-r--r-- 2014-11-23 20:00 /path/to/dir/d_20141123-2301/
-rw-r--r-- 2014-11-23 20:00 /path/to/dir/d_20141123-2302/
-rw-r--r-- 2014-11-23 20:00 /path/to/dir/d_20141123-2303/
...
...
但是
hadoop fs -ls -R /path/to/dir/d_20141123* | grep -oE '\/(d_.*)\/'
我得到了输出:
/d_423432-342/
/d_231314-343/
...
...
但是用这个命令:
hadoop fs -ls -R /path/to/dir/d_20141123* | grep -oE '(d_\d+\-\d+)'
我没有输出。这是为什么?我删除的只是我的正则表达式中的正斜杠
答案 0 :(得分:1)
我删除的只是我的正则表达式中的正斜杠
如果只是。您删除了正斜杠,删除了逃避它们的反斜杠,删除了.*
,然后添加了\d+\-\d+
。
一次执行一项,您会发现问题:grep -E
不支持\d
作为[[:digit:]]
的同义词。
重写使用[[:digit:]]
(POSIX)或使用grep -P
(GNU):
grep -oE '(d_[[:digit:]]+-[[:digit:]]+)'
grep -oP '(d_\d+\-\d+)'
您还可以根据预期的输入以各种方式简化它:
grep -oE 'd_[^/]*'
grep -oE 'd_[0-9-]*'