我正在做一個 bash 腳本,它需要首先生成一個文本檔案,其中包含它將運行腳本的路徑。但是,有一些名稱相似的路徑,grep 命令對我來說不能正常作業。
使用的命令是:
find /base/path/ -type d | grep -i "$1" | grep -i ".root" | grep -i "Inv" | grep -v "deleted"
這是我當前的輸出:
/base/path/lbasaur/Inv/DATA18/WenuL/group.phys-hdbs.mc16_13TeV.root
/base/path/lbasaur/Inv/DATA18/WenuL/group.phys-hdbs.mc16_13TeV_1.root
/base/path/lbasaur/InvCR/DATA16/Wenu/group.phys-hdbs.mc16_13TeV.root
/base/path/lbasaur/InvCR/DATA16/Wenu/group.phys-hdbs.mc16_13TeV_1.root
/base/path/lbasaur/InvCR/DATA16/WenuB/group.phys-hdbs.mc16_13TeV_2.root
/base/path/lbasaur/InvCR/DATA16/WenuB/group.phys-hdbs.mc16_13TeV_3.root
/base/path/lbasaur/InvCR/DATA16/WenuB/group.phys-hdbs.mc16_13TeV_4.root
但我只想要帶有“Inv”的路徑,而不是“InvCR”。因此,當我使用這個大命令時,名稱 Inv 和 InvCR 被選中。我該如何解決?
uj5u.com熱心網友回復:
我明白你在說什么。有幾種方法可以從您正在使用的搜索中排除某個名稱grep -v "deleted"
使用同樣的格式我們可以排除InvCR:
find /base/path/ -type d | grep -v 'InvCR'
您也可以使用-prune:
find /base/path/ -path '*InvCR*' -prune -o -type d -print
實際上你只需要使用一個find和一個grep來完成你想要的:
find /base/path/ -path '*deleted*' -prune -o -path '*InvCR*' -prune -o -type d -wholename '*Inv*' -print | grep -P '.*'"$1"'.*[.]root'
請注意,這區分大小寫以符合您的原始代碼。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/535680.html
標籤:狂欢壳grep寻找
