2016-03-22 16 views
0

Kullanıcı testi için Salt/etc/shadow öğesinden tuz almaya çalışıyorum. Bana döndürenegrep,/etc/shadow alanından Tuz al

egrep -o "test:(.*$){1}" /etc/shadow --color 

: Aslında

test:$6$zy513.E6$ae7nXcZnVFb0f2H.x9I7xXTwJLZJzQtTzsdfkOSnZ7KiFxR.slWFPogXcnwZdGI9AW1n9EhFtBmozfxPebXbB0:16882:0:99999:7::: 

istediğim şu, Tuz: my egrep düzeltmek için nasıl

test:$6$zy513.E6$ 

bilen var mı? Bunun için bir çözüm bulamadım.

Teşekkürler.

+1

Dolar tabelasından kaçış. 'egrep -o 'testi: (. * \ $) {1}''. Normal ifadede, dolar işareti satırın sonu anlamına gelir. – ghoti

+0

@ghoti: Sana katılıyorum. Ancak benim sistemimde '' $ '' çalışmıyor, ancak '' $ ''. – blackSmith

+0

@blackSmith - elbette, bu da işe yarıyor. Özel karakterleri bir aralığa (yani köşeli parantez) koymak, onların özelliğini ortadan kaldırır. Bu dönem, soru işareti, artı ve yıldız ve karat için de çalışır ('[.? + * ^]'). (Bir karat aralığın başlangıcındaysa, menzili tersine çevirir, böylece [^ 0-9] '," rakam olmayan herhangi bir karakter "anlamına gelir.) – ghoti

cevap

1

ne kimse bu konuda:

egrep -o 'test:(\$[^$]+){2}\$' /etc/shadow --color Belirli bir kullanıcı için yalnızca arıyorsanız

, bu durumda hiç awk komutunu değiştirmek test

+0

Çalışmıyor çünkü çift tırnak kullanıyorsunuz. Çift tırnak içinde kabuk, $ $ 'ı genişletir. İlk örnek, yalnızca bir karakter sınıfında kullanıldığında "$' nin bir normal ifadede kaçmasına gerek olmadığı için işe yarar, ancak \ shell'in genişletmesini engeller. – hek2mgl

+0

Tamam anladım.Cevabınızı, açıklamanızı dikkate almak için düzenledim, teşekkürler. – rdupz

+0

Erm ... Çift tırnak, '$' karakterini izleyen karakterler değişken ya da kullanım dışı aritmetik ifade olarak yorumlanamadığı sürece sorun olmamalıdır. Şuna bak: 'echo '$] [$" '. Elbette, hangi karakterlerin değişken olarak sayıldığını, kaçmanın gerekip gerekmediğini belirlemeyi başaramaz, başhekimler için bir görevdir. :-) 'egrep -o“ testi: (\\\ $ [^ $] +) {2} \\ $ "/ etc/shadow' .. aralığın içindeki dolar dışı işareti not edin. – ghoti

0

Böyle awk kullanabilirsiniz:

awk -F: '{gsub(/\$[^$]+$/, "$",$2);print $1,$2}' OFS=: /etc/shadow 

-F:: için alan ayırıcı setleri, işte bu basit alanda 2 ($2) parola bölümüne erişebilmek için yapar.

gsub() tarafından kullanılan normal ifade, son dolardan sonra dizelerin sonuna kadar dolar tarafından dolar.

Çıkış:

test:$6$zy513.E6$ 

BTW, $6 kısmı, şifre, SHA-512 için 6 standları karma için kullanılan karma algoritma tipi, tuz değildir. Tuz, daha fazla bilgi için Wikipedia numaralı telefonu kontrol edin.


Güncelleme:

awk -F: '$1=="test" {gsub(/\$[^$]+$/, "$",$2);print $1,$2}' OFS=: /etc/shadow 
+0

Sadece tek bir Kullanıcı istedim, Bilmediğimden beri hiçbir şey değiştirmeden önce awk ile çalışmamıştım, bu yüzden sadece bana daha önce bahsettiğim tek kullanıcı veriyor. – Ne00n

+0

'awk -F: '/ username/{gsub (/ \ $ [^ $] + $ /," $ ", $ 2) kullanın; $ 1, $ 2}' OFS =:/etc/shadow' yazdı – hek2mgl