更改grep regex输出

gudnpqoy  于 2021-05-30  发布在  Hadoop
关注(0)|答案(1)|浏览(429)

怎么会有这个命令
使用此命令 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+)' 我没有输出。为什么?我删除的只是正则表达式中的前斜杠

hts6caw3

hts6caw31#

我删除的只是正则表达式中的前斜杠
只要。删除了正斜杠,删除了反斜杠,删除了 .* ,您添加了 \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-]*'

相关问题