我正在做一个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会被拾取。我怎样才能修好它?
我明白你的意思了。有几种方法可以从您正在使用的搜索中排除某些名称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'
注意,这是大小写敏感的,以符合您的原始代码。