[英]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.