Bu metin içeren bir dizin yapısındaki dosyaları nasıl grep edebilirim
addDesignControlChangeNotification
ama bu metni eksik
removeDesignControlChangeNotification
Teşekkürler!
Not: Yani betiğin başlayacağı dizin ve tüm alt dizinler.
Bu metin içeren bir dizin yapısındaki dosyaları nasıl grep edebilirim
addDesignControlChangeNotification
ama bu metni eksik
removeDesignControlChangeNotification
Teşekkürler!
Not: Yani betiğin başlayacağı dizin ve tüm alt dizinler.
Yanıtlar:
İşte gevşek bir şekilde Rich Homolka'nınkilere dayanan. Cevap , ancak dizin ağaçlarında çalışır:
find . -type f -exec grep -l addDesignControlChangeNotification {} \; |
while IFS= read -r file; do
grep -q removeDesignControlChangeNotification "$file" > /dev/null ;
[ $? -ne 0 ] && echo $file;
done
Dönen dosyalar içerecektir addDesignControlChangeNotification Ama değil removeDesignControlChangeNotification.
AÇIKLAMA:
find . -type f -exec grep -l foo {} \;: Bu, dizgeyi içeren mevcut dizinin herhangi bir alt dizinindeki tüm dosyaları basacaktır. foo. -l bayrak grep'in yalnızca eşleşen dosyaların adlarını yazdırmasına neden olur.
while read file : Bu, yukarıda bulunan her bir dosyayı tekrar eder ve ismini değişkene kaydeder. $file.
grep -q bar "$file" > /dev/null : bu komut dizeyi arar bar İçerdiği dosyaların her birinde foo.
[ $? -ne 0 ] && echo $file; : Eğer dönüş değeri ( $? ) grep komut 0'dı (yani, dizede dosyada değilse), dosyanın adını yazdırın.
find . -name '*.m' -type f -exec grep -l addDesignControlChangeNotification {}... kendimden söz ettiğimden beri kendime eklediğim;) Teşekkürler!
bu çalışmalı:
FIRST=addDesignControlChangeNotification
SECOND=removeDesignControlChangeNotification
grep -l $FIRST * | while IFS= read -r FILE
do
grep $SECOND "$FILE" &> /dev/null
if [ $? -ne 0 ]
then
echo "File $FILE has $FIRST but not $SECOND"
fi
done
-r ilk grep Dizinleri tekrarlamak istiyorsanız komut. Veya cevabımı kullanabilirsiniz;).
Bir astar:
comm -2 -3 <(grep -rl addDesignControlChangeNotification . | sort ) \
<(grep -rl removeDesignControlChangeNotification . | sort )
grep -r özyinelemeli bir grep, <() olduğu işlem değiştirme , ve comm size bir çift (sıralanmış) dosyanın ortak / sahip olmadığı hatları gösterir. Bu durumda sadece sütun 1 çıktısını istiyoruz: ikincisinde olmayan ilk dosyadaki satırlar (burada "dosya" gerçekten grep çıktı)