Sebenarnya awk
adalah persis alat yang harus Anda perhatikan:
ps axu | grep '[j]boss' | awk '{print $5}'
atau Anda dapat membuang grep
seluruhnya sejak awk
tahu tentang ekspresi reguler:
ps axu | awk '/[j]boss/ {print $5}'
Namun jika, karena alasan yang aneh, Anda benar-benar tidak bisa gunakan awk
, ada hal lain yang lebih sederhana yang dapat Anda lakukan, seperti menciutkan semua spasi putih menjadi satu spasi terlebih dahulu:
ps axu | grep '[j]boss' | sed 's/\s\s*/ /g' | cut -d' ' -f5
grep
itu trik, omong-omong, adalah cara yang rapi untuk hanya mendapatkan jboss
proses dan bukan grep jboss
satu (ditto untuk awk
varian juga).
grep
proses akan memiliki grep [j]boss
literal dalam perintah prosesnya agar tidak tertangkap oleh grep
itu sendiri, yang mencari kelas karakter [j]
diikuti oleh boss
.
Ini adalah cara bagus untuk menghindari | grep xyz | grep -v grep
paradigma yang digunakan sebagian orang.
awk
version mungkin merupakan cara terbaik untuk melakukannya, tetapi Anda juga dapat menggunakan cut
jika Anda pertama kali menekan pengulangan dengan tr
:
ps axu | grep jbos[s] | tr -s ' ' | cut -d' ' -f5
# ^^^^^^^^^^^^ ^^^^^^^^^ ^^^^^^^^^^^^^
# | | |
# | | get 5th field
# | |
# | squeeze spaces
# |
# avoid grep itself to appear in the list
Saya suka menggunakan perintah tr -s untuk ini
ps aux | tr -s [:blank:] | cut -d' ' -f3
Ini meremas semua ruang putih menjadi 1 ruang. Dengan cara ini memberitahu cut untuk menggunakan spasi sebagai pembatas dihormati seperti yang diharapkan.