Prelude:
Bir yol / dosya listesi sıralı girişi göz önüne alındığında, ortak yolların nasıl bulunur?
Sıralanan girdiyi stdin'den beslerken, stdin'den en kısa öneki nasıl seçilir?
Burada "önek" normal bir anlama sahiptir, örneğin, "abcde" dizgisi "abc" önekine sahiptir. İşte benim örnek girdi
$ echo -e '/home/dave\n/home/dave/file1\n/home/dave/sub2/file2'
/home/dave
/home/dave/file1
/home/dave/sub2/file2
Bu, komutu kullanarak art arda uygun öneki stdin'den kaldırmak için bir örnektir sed
:
$ echo -e '/home/dave\n/home/dave/file1\n/home/dave/sub2/file2' | sed "N; /^\(.*\)\n\1\//D; P; D"
/home/dave/file1
/home/dave/sub2/file2
Soru:
Sorum şu , bunun yerine uygun öneki nasıl koruyacağınız ve bu öneki olan tüm satırları nasıl kaldıracağım. Her ikisi de sinüs /home/dave/file1
ve /home/dave/sub2/file2
öneki vardır /home/dave
, /home/dave
diğer ikisi olmasa da korunacaktır. Yani, yukarıdaki sed
komutun tam tersini yapar.
Daha fazla bilgi:
- Giriş zaten sıralanacaktı
- Eğer
/home/dave /home/dave/file1 /home/phil /home/phil/file2
(echo -e '/home/dave\n/home/dave/file1\n/home/dave/sub2/file2\n/home/phil\n/home/phil/file2'
) varsa, beklerdim/home/dave
ve/home/phil
cevap olurdum .
Uygulama:
Benzer içerik içeren iki disk birimim var. V1’de olanı, ancak v2’den başka bir disk birimine, v3’e kopyalamak istiyorum. Kullanılması find
, sort
ve comm
ben kopyalamak için ne bir listesini elde edebilir, ama ben daha ileri o listeyi temizlemek gerekir. Yani /home/dave
listede olduğum sürece diğer ikisine de ihtiyacım yok.
Teşekkürler!
/home/dave /home/dave/file1 /home/phil /home/phil/file2
, ben bekliyorsunuz ediyorum/home/dave
ve/home/phil
cevabı olmalıydı.