Yanıtlar:
Aslında ne demek istediğinizi varsayalım ki son sütuna kadar olan her şeyi silmek ve john.doe
bozulmadan bırakmak istiyorsunuz :
echo 'hd_ma_prod_customer_ro:*:123456789:john.doe' |
sed 's/.*://'
İlk satır sadece test dizisini sed
örneğin amaçlara yönlendirir.
İkincisi, temel bir sed
ikamedir . Birinci ve ikinci arasındaki kısım /
aranacak regex'tir ve ikinci ve üçüncü arasındaki kısım değiştirilecek olanla değiştirilir (bu durumda silerken hiçbir şey yoktur).
Düzenli ifade için, .
herhangi bir karakterle eşleşir, *
bunu herhangi bir sayıda (sıfır dahil) tekrarlar ve :
iki nokta üst üste eşleştirir. Öyleyse etkili bir şekilde onu izleyen kolon. Yana .*
iki nokta üst üste içerebilir, maç 'açgözlü' ve her şeyi son kolona dahildir.
sed -r 's/:/\t/g' filename | awk -F'\t' '{print $4}'
Tüm oluşumlarını değiştiriyorum : bir sekmeyle ve sonra awk
john.doe dizesini çıkarmak için kullanıyorum .
Eğer bir dosyanız yoksa bunu deneyebilirsiniz.
echo 'hd_ma_prod_customer_ro:*:123456789:john.doe' | sed -r 's/:/\t/g' |
awk -F'\t' '{print $4}'
Graeme yorumlarına gereğince kullanabileceğimiz awk
kullanarak sadece geçen sütunu yazdırmak için NF
bir değişkeni awk
aşağıdaki gibi.
echo 'hd_ma_prod_customer_ro:*:123456789:john.doe' | sed -r 's/:/\t/g' | awk -F'\t' '{print $NF}'
Gereksizlerden kurtulmak için Graeme'nin yorumlarını dahil etmek sed
Komut aşağıdaki gibi değiştirilebilir.
echo 'hd_ma_prod_customer_ro:*:123456789:john.doe' | awk -F':' '{print $NF}'
awk
. Temel olarak, cevabımda aldığım komutları test etmeye ve kullanıcının ihtiyacına göre değiştirmeye çalışıyorum. :)
-F
seçeneği awk
ayırıcıyı belirtir. Eğer awk
iki nokta üst üste kullanmanız gerekiyorsa, iki nokta üst üste sekmeyle gerek yoktur. Ayrıca, $NF
yerine kullanabileceğiniz son alanı elde etmek istiyorsanız, $4
her zaman 3 sütun yoksa, bu işe yarar.
Başka bir yöntem kullanarak awk
:
awk -F: '{ print $NF }'
Deneyin lütfen
düzenleme: çapa kaldırıldı
echo 'abc:fjk' |sed 's/.*:/john.doe/g'
ve silmek
echo 'abc:fjk' |sed 's/.*://g'
^
Çapa ya Sorunun durumunda veya örnek durumda hiç fark etmez. İle başlayan herhangi bir adres /.*
zaten anlamına gelir ^
.
awk
, neden sadece kullanmıyorsunuzawk -F:
?