regex - 更改 grep 正则表达式输出

标签 regex bash hadoop

这个命令怎么来的

用这个命令

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/

相关文章:

c# - N-S 和 E-W 格式的纬度/经度正则表达式

regex - 用两个元音过滤所有包含单词的行(grep)?

java - NoSuchMethodError : org. apache.hadoop.io.retry.RetryUtils.getDefaultRetryPolicy

regex - 给定单词列表,对文本正文进行全词匹配

JavaScript 从字符串中删除句号、逗号和空格

bash - perl 执行一个输入来自 <(cmd2 input) 的命令

linux - bash + Linux + 如何忽略字符 "!"

linux - 使用 bash 获取特定列的总和?

sql - Hive 分区性能

hadoop - Apache Avro - 内部表示