[英]regex to filter files using filename shell script
嘗試根據文件名約定過濾文件
eg: Standard_<number>_<15digitnumber>.xml
我可以使用下面的命令來獲取符合以上條件的文件,但中間也包含varchar。
ls Standard_[0-9]*_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9].xml
輸出 :
Standard_2149190256_151116162725717.xml
Standard_2149190257_151116162725717.xml
Standard_ 2149ABCDE _151116162725717.xml
在上面突出顯示的輸出中,它返回字符串,因為中間的數字后面有*。 我嘗試在[0-9]之前和之后加上+,以僅包括數字,但命令不起作用。
ls Standard_[0-9]+_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9].xml
輸出 :不能ls:“ / somefolder / Standard_ [0-9] + _ [0-9] [0-9] [0-9] [0-9] [0-9] [0-9] [ 0-9] [0-9] [0-9] [0-9] [0-9]“未找到
ls Standard_+[0-9]_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9].xml
輸出 :不能ls:“ / somefolder / Standard _ + [0-9] _ [0-9] [0-9] [0-9] [0-9] [0-9] [0-9] [ 0-9] [0-9] [0-9] [0-9] [0-9]“未找到
感謝您的幫助。
Bash沒有正則表達式,Shell有Globbing 。
您將在linux中的命令中使用regex,例如egrep,sed ...
文件Standard_01234_012345678912345.xml
1-照做
ls Standard_[0-9]+_[0-9]{15}.xml
ls: cannot access Standard_[0-9]+_[0-9]{15}.xml: No such file or directory
2-使用egrep
ls -l |egrep Standard_[0-9]+_[0-9]{15}.xml
-rw-r--r-- 1 root root 0 Oct 24 16:07 Standard_01234_012345678912345.xml
如您所見,正則表達式不是問題,而是您使用的地方。 您可以了解通配符或使用egrep,sed,awk代替簡單的ls。
提示1:[0-9] {15}與重復[0-9] 15次相同。
提示2:Standard_ [0-9] *部分起作用,因為'*'在正則表達式和通配符中是通配符
Bash的擴展范圍可以在這里為您提供幫助:
$ printf "%s\n" Standard*
Standard_2149190256_151116162725717.xml
Standard_2149190257_151116162725717.xml
Standard_2149ABCDE_151116162725717.xml
$ shopt -s extglob nullglob
$ printf "%s\n" Standard_+([0-9])_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9].xml
Standard_2149190256_151116162725717.xml
Standard_2149190257_151116162725717.xml
在這里, +([0-9])
匹配一個或多個數字的序列,我們排除了文件“ Standard_2149ABCDE_151116162725717.xml”。
“ ls”的問題在於它不完全符合正則表達式posix。 那就是瘋狂。 但是'grep'是兼容的,並且可以很好地與'ls'一起玩。
ls Standard_*.xml | grep -P [[:digit:]]+_[[:digit:]]{15}
我喜歡“ perl”樣式的正則表達式(PCRE),因此可以解釋“ grep”命令中看起來很奇怪的“ -P”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.