Grep, değişkene atandıktan sonra diziyi bulamıyor


1

Koşarım:

awk -F ',' '{print $2}' data.dat | sort | uniq |  tr '\n' ',' | grep "*)>nS4XkrlH  @XUL"

ve dizi sonuçlarda bulunur.

Sonra koşarım

b=`awk -F ',' '{print $2}' data.dat | sort | uniq |  tr '\n' ','`
echo $b | grep "*)>nS4XkrlH  @XUL"

ancak sonuç döndürülmedi.

Bunun neden olduğu hakkında bir fikri olan var mı?

Herhangi bir yardım için teşekkürler.

Yanıtlar:


0

Bu iki komut dizisi arasındaki anahtar fark, ikincisinin echo $bkabuk sözcük bölme işlemini gerçekleştiren içeriyor olmasıdır . İkinci komut sırasının birincisiyle aynı şekilde çalışmasını sağlamak için, değiştirin:

echo $b | grep "*)>nS4XkrlH  @XUL"

ile:

echo "$b" | grep "*)>nS4XkrlH  @XUL"

Kelime bölme

Bu iki echoifadede boşlukların nasıl işlendiğini gözlemleyin :

$ b="a   b c"
$ echo "$b"
a   b c
$ echo $b
a b c

Çift tırnak işaretleri olmadan, kabuk argümanlar üzerinde sözcük ayırma gerçekleştirir echo. Bu, tüm ardışık boşlukların tek bir alana yoğunlaştırıldığı anlamına gelir. Çift tırnak ile, kelime bölme bastırılır ve boşluk korunur.

Sözcük Bölme ve grepBirden Çok Boşluklu Bir Desen

Sizin grepdesen iki ardışık boşluklar içeriyor. Argüman echoçift ​​tırnak içine alınmazsa, çıktısı echobu iki boşluğa sahip olmaz ve eşleşme bulunmaz. Gözlemek:

$ b="*)>nS4XkrlH  @XUL"
$ echo $b | grep "*)>nS4XkrlH  @XUL"
$ echo "$b" | grep "*)>nS4XkrlH  @XUL"
*)>nS4XkrlH  @XUL

İlki grephiçbir şeyle eşleşmiyor, ikincisi eşleşmiyor. Aradaki fark kabuğun kelime bölüşmesidir.


Haklısın! Açıklama çok iyiydi.
dr.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.