Yanıtlar:
Aslında ne demek istediğinizi varsayalım ki son sütuna kadar olan her şeyi silmek ve john.doebozulmadan 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 sedikamedir . 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 awkjohn.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 awkkullanarak sadece geçen sütunu yazdırmak için NFbir değişkeni awkaş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. :)
-Fseçeneği awkayırıcıyı belirtir. Eğer awkiki nokta üst üste kullanmanız gerekiyorsa, iki nokta üst üste sekmeyle gerek yoktur. Ayrıca, $NFyerine kullanabileceğiniz son alanı elde etmek istiyorsanız, $4her 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:?