Grep

ls |grep 正則表達式,忽略帶有 .tab 的文件,

  • October 23, 2009

我知道一些正則表達式,但我不知道如何讓它工作。我想列出所有沒有 .tab 的文件。並且文件名末尾沒有 ~ 並且不是 .o (或 .bin)

我可以列出所有具有 .tab 的文件。通過寫作

ls | grep .tab.

但是我無法弄清楚如何讓它忽略這些文件並列出其他所有內容。我試過了

ls | grep [^(.tab.)]

但出現錯誤並認為我的最終正則表達式是

ls | grep ([^(.tab.)]|.o$|.bin$)

但是我從來沒有做過太多的正則表達式,所以我確信即使語法正確,最終也是錯誤的。

我將如何做到這一點取決於上下文。如果這不是一個腳本,而我只是想看看這個,我可以使用 ls:

ls -a | egrep -v '(tab|\.o$|\.bin$|~$)'

如果在腳本中,我會使用循環:

for file in *; do
#file $file in .* *; do   -- To Include dot (hidden files)                     
  if ! egrep -q '(tab|\.o$|\.bin$|~$)' <<<$file; then
     echo $file
  fi
done

如果您只需要正常文件而不是目錄,則可以使用 -f 添加另一個 if 測試。如果您想遞歸地執行此操作,您可以使用帶有 -regex 測試和 posix-egrep 的 GNU find。但請考慮到這個正則表達式將匹配相對於您搜尋的目錄的完整路徑名這一事實。

如果您支持它,另一個不錯的選擇是擴展 glob,請參閱 Dennis 的回答。

引用自:https://serverfault.com/questions/77613