簡體   English   中英

更改grep regex輸出

[英]changing grep regex output

這個命令怎么來

用這個命令

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+)'

我沒有輸出。 這是為什么? 我刪除的只是正則表達式中的正斜杠

我刪除的只是正則表達式中的正斜杠

要是。 您刪除了正斜杠,刪除了反斜杠轉義符,刪除了.* ,並添加了\\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-]*'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM