Lütfen tr -s ' '
seçeneğin baştaki herhangi bir boşluğu kaldırmayacağını unutmayın . ps
Sütununuz sağa hizalıysa ( pid'de olduğu gibi ) ...
$ ps h -o pid,user -C ssh,sshd | tr -s " "
1543 root
19645 root
19731 root
Daha sonra kesme, bu alanlardan bazıları için ilk sütun ise boş bir satırla sonuçlanacaktır:
$ <previous command> | cut -d ' ' -f1
19645
19731
Önünde bir boşluk bırakmadıkça, tabii ki
$ <command> | sed -e "s/.*/ &/" | tr -s " "
Şimdi, bu özel pid sayı durumu için (isimler değil), adında bir işlev var pgrep
:
$ pgrep ssh
Kabuk işlevleri
Bununla birlikte, genel olarak, kabuk işlevlerini özlü bir şekilde kullanmak aslında hala mümkündür , çünkü read
komutla ilgili güzel bir şey vardır :
$ <command> | while read a b; do echo $a; done
Okunacak ilk parametre a
, ilk sütunu seçer ve daha fazlası varsa, geri kalan her şey yerleştirilir b
. Sonuç olarak, sütun +1 sayınızdan daha fazla değişkene asla ihtiyacınız olmaz .
Yani,
while read a b c d; do echo $c; done
daha sonra 3. sütunu çıkarır. Yorumumda belirtildiği gibi ...
Değişkenleri çağıran betiğe aktarmayan bir ortamda borulu okuma yürütülecektir.
out=$(ps whatever | { read a b c d; echo $c; })
arr=($(ps whatever | { read a b c d; echo $c $b; }))
echo ${arr[1]}
Dizi Çözümü
Böylece, dizeyi bir diziye bölmek için varsayılan olarak bir boşluğa sahip olan kabuk değişkeni IFS'yi kullanmak olan @frayser'ın cevabını buluruz. Yine de sadece Bash'de çalışır. Dash ve Ash bunu desteklemiyor. Bir Busybox şeyinde bir dizgiyi bileşenlere ayırmakta gerçekten zorlandım. Tek bir bileşen elde etmek (örneğin awk kullanarak) ve sonra bunu ihtiyacınız olan her parametre için tekrarlamak yeterince kolaydır. Ama sonra aynı satırda tekrar tekrar awk'ı çağırırsınız veya aynı satırda yankılı bir okuma bloğu tekrar tekrar kullanırsınız. Etkili veya hoş değil. Böylece kullanarak bölme yaparsınız ${name%% *}
ve bunun gibi. Bazı Python becerileri için özlem duymanıza neden olur, çünkü aslında alıştığınız özelliklerin yarısı veya daha fazlası kaybolduğunda kabuk komut dosyası yazmak artık pek eğlenceli değildir. Ancak python'un bile böyle bir sisteme kurulmayacağını ve böyle bir sistemde olmadığını varsayabilirsiniz ;-).