这个命令怎么来的
用这个命令
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+)'
我没有得到任何输出。这是为什么?我删除的只是正则表达式中的正斜杠
最佳答案
All I removed was the forward slashes in my regex
只要。您删除了正斜杠,删除了转义的反斜杠,删除了 .*
,然后添加了 \d+\-\d+
。
一次做一个,你会发现问题:grep -E
不支持 \d
作为 [[ 的同义词:数字:]]
。
重写为使用 [[:digit:]]
(POSIX)或使用 grep -P
(GNU):
grep -oE '(d_[[:digit:]]+-[[:digit:]]+)'
grep -oP '(d_\d+\-\d+)'
您还可以根据您的预期输入以各种方式简化它:
grep -oE 'd_[^/]*'
grep -oE 'd_[0-9-]*'
关于regex - 更改 grep 正则表达式输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27138310/