Perintah Linux

Perintah semacam Bash

Perintah semacam Bash
Nasib baik cuba menerapkan algoritma semacam dalam bash daripada selesai sebelum esok. Jangan risau, anda tidak perlu kerana anda mempunyai perintah semacam.

Dengan menyusun, anda boleh memesan fail berdasarkan susunan dalam kamus atau berdasarkan nilai berangka, mengacak baris fail, menghapus baris pendua, dan memeriksa apakah fail disusun.

Anda mungkin dapat melakukan perkara lain dengannya tetapi pertama, mari kita bimbang tentang membungkus kepala kita tentang cara menggunakan semacam dalam skrip bash.

Apa jenis?

Urutkan adalah arahan luaran yang menggabungkan fail sambil menyusun isinya mengikut jenis urutan dan menulis hasil dari jenis ke output standard.

Susun pilihan arahan untuk bash

Perintah urut hadir dengan 31 pilihan (13 utama dan 18 dikategorikan sebagai lain). Pengaturcaraan bash yang paling berpengalaman (bahkan pakar) hanya mengetahui beberapa pilihan jenis utama yang diperlukan untuk mendapatkannya. Yang lain jarang tersentuh. Beruntung untuk anda, kami mempunyai masa untuk menyentuh mereka semua.

Pilihan jenis utama

Ini adalah pilihan yang membantu anda menyelesaikan sesuatu dan menyusun (Menyusun) di samping memanipulasi hasil yang disusun (Pemprosesan pos) dan menerapkan penapis (Penapis) sebelum menyusun.

Menyusun

Urutan disertakan dengan 5 jenis penyortiran yang berbeza. Berikut adalah jadual yang menunjukkan setiap jenis jenis dengan pilihan yang berkaitan.

Susun Pilihan pendek / pilihan panjang / dll
perkataan
Urutan angka (umum) -g / -general-numerik-urutkan
umum-angka
sokongan untuk notasi saintifik
0.1234e4 = 1234
Jenis angka (manusia) -h / -jenis-angka-manusia
angka-manusia
1.234K = 1234
Berangka -n / -penyusun nombor
berangka
… < -1 < 0 < 1 <…
Sebulan -Jenis / M-bulan
bulan
Tidak diketahui < Jan < Feb <… < Nov < Dec
Secara rawak -r / -rawak-urutkan
rawak
Versi -V / -versi-jenis
versi

Perhatikan bahawa setiap jenis jenis mempunyai pilihan panjang yang diakhiri dengan -sort. Sebagai tambahan kepada pilihan pengisihan tertentu, pilihan -sort = WORD boleh digunakan untuk menyusun mengikut kata. Contohnya -sort = random boleh digunakan sebagai pengganti -random-sort atau -r.

Contoh

Berikut adalah beberapa contoh arahan urutan untuk setiap kaedah penyortiran.

Contoh) Menyusun nama

Isih tidak mempunyai masalah menyusun baris mengikut abjad. Pertimbangkan senarai orang terkenal yang tidak disusun.

Fungsi

orang terkenal()

curl - senyap https: // www.biografi dalam talian.bersih / orang / terkenal-100.html
| kandungan kandungan grep | sed-e /<[^>] *.// g '-e' s / WWII // g '-e' s / \ (Wilbur \)
/ \ 1 Wright / '| grep -o -e '\ (\ ([A-Z] \ + [.] \?\) \ + [a-z] * \ s \) \ + ([0-9] \ + \ s [^)] \+.'

Garis arahan

terkenal-orang | mengurut

Pengeluaran

Stephen King (1947 -)
Steve Jobs (1955 - 2012)
Sting (1951 -)
Tiger Woods (1975 -)
Tom Cruise (1962 -)
Usain Bolt (1986 -)
Vinci (1452 - 1519)
Walt Disney (1901 - 1966)
Wilbur Wright (1867 - 1912)
Woodrow Wilson (1856 - 1924)

Contoh) Jenis numerik am

Sekiranya kita perlu menyusun nilai numerik dengan mengambil kira notasi saintifik seperti 99e2, kita dapat menggunakan urutan angka umum.

Fungsi

tidak disusun-angka-nilai ()

seq 100 | susun - jenis-rawak | sed '3i 9e2' | sed '3i 99K'

Pertimbangkan output yang disusun menggunakan setiap kaedah. Perhatikan bahawa selain mengandung nilai 1 hingga 100, daftar ini juga termasuk '9e12' (900) dan '99K' (99000).

Garis arahan

tidak disusun-angka-angka | urutkan -n

Pengeluaran

96
97
98
99
99K
100

Bagaimana dengan 900 dan 99000. Betul, ia hanyalah angka. Seterusnya.

Garis arahan

tidak disusun-angka-angka | urutkan -h

Pengeluaran

96
97
98
99
100
99K

Bagaimana dengan 900. Betul, itu hanya jenis angka manusia. Seterusnya.

Garis arahan

tidak disusun-angka-nilai | urutkan -g

Pengeluaran

96
97
98
99
99K
100
9e2

Bagaimana dengan 99000. Betul itu hanya jenis angka umum. Seperti yang anda lihat, kaedah penyortiran tidak sesuai dalam kes ini; namun, itu tidak bermakna anda tidak boleh membuat keputusan.

Garis arahan

tidak disusun-angka-angka | sed 's / [kK] / e3 /' | urutkan -g

Pengeluaran

96
97
98
99
100
9e2
99e3

Sekarang lebih seperti itu.

Contoh) Jenis angka manusia

Sekiranya kita perlu menyusun nilai numerik dengan mengambil kira makna notasi seperti K, G, M, dan E, kita dapat menggunakan urutan angka manusia.

Garis arahan

seq 100 | susun - jenis-rawak | sed '3i 3k' | urutkan -h

Pengeluaran

96
97
98
99
100
3k

Contoh) Jenis angka

Sekiranya semua yang kita perlukan adalah mengisih bilangan bulat, urut angka adalah muslihatnya.

Garis arahan

seq 100 | susun - jenis-rawak | urutkan --numerik-urutkan

Pengeluaran

95
96
97
98
99
100

Contoh) Jenis bulan

Urutan bulan membolehkan anda memesan baris mengikut bulan. Ini boleh menjadi berguna untuk mengelompokkan baris bersama-sama berdasarkan bulan terutamanya sekiranya pilihan untuk menyusun mengikut waktu tidak tersedia.

Fungsi

bulan ()

kucing  <Jan
Feb
Mac
Apr
Mungkin
Jun
Jul
Ogos
Sep
Okt
Nov
Dis
EOF

Anggaplah bulan itu tidak disusun.

Garis arahan

bulan | urutkan - urut secara rawak

Pengeluaran

Mac
Okt
Dis
Apr
Mungkin
Sep
Ogos
Nov
Jul
Jan
Feb
Jun

Kita selalu dapat menyusun mengikut bulan.

Garis arahan

bulan | susun - jenis-rawak | urutkan - sebilangan bulan

Pengeluaran

Jan
Feb
Mac
Apr
Mungkin
Jun
Jul
Ogos
Sep
Okt
Nov
Dis

Perhatikan bahawa jika kita mengubah Desember menjadi substring pada bulan November mengatakan 'Novem', ia akan muncul setelah 'Nov' dalam output yang disusun.

Contoh) Urut secara rawak - bunuh terminal orang lain

Seperti yang dijangkakan, urutan rawak berlawanan dengan menyusun, mencampuradukkan garis.

Katakan bahawa untuk tujuan pendidikan kita mahu membunuh pengguna lain. Kita harus memastikan bahawa itu bukan masalah kita dan mengacak senarai supaya lebih baik dan kita boleh mengatakan bahawa pty dipilih secara rawak.

Perintah

mesej-pty ()


pty tempatan;
pty = "$ 1"
;
echo -n "Anda akan turun"> / dev / $ pty;
untuk i dalam 5 4 3 2 1;
buat
tidur 1;
echo -n "$ i"> / dev / $ pty;
selesai;
gema "Bye!"> / dev / $ pty;
tidur 1


ps | grep pty | grep -v -e $ (mypty) | susun - jenis-rawak | kepala -1> stdin;

mesej-pty $ (pty < stdin );
bunuh $ (pid < stdin )


Keluaran di terminal orang lain
Anda akan turun dalam 5 4 3 2 1 Bye!]
(keluar)

Contoh) Urutan versi - menyusun ips

Seperti yang anda ketahui, fail sumber boleh diformat menggunakan rentetan seperti 1.0. Tambahan pula, versi mungkin lebih mendalam dengan nombor versi seperti 1.0.0 seperti yang dilihat dalam skema versi semantik yang popular.

Penyortiran versi membolehkan anda menyusun nombor versi. Hebat! Bagaimana sekarang? Mari kita mengujinya.

Untuk contoh ini, saya telah menyiapkan skrip bash untuk menghasilkan ips rawak sehingga kita tidak perlu pergi ke sana. Ada di repo. Bagi kita yang tidak mempunyai repo inilah permulaan yang pantas.

Perintah

klon git https: // github.com / faaosoempemp3 / linuxhint.com.git
alias random-ips = 'test -f "linuxhint.com / menghasilkan-rawak-ips.sh "; bash $ _ '

Sekarang anda sudah bersedia, mari kita mulakan.

Garis arahan

rawak-ips 200 | tee ips

Pengeluaran

199.174.177.98
180.33.247.107
87.130.125.109
76.86.8.20
162.41.183.150
226.58.10.196
83.121.11.145
80.199.197.19
44.214.89.52
185.174.143.111

Baiklah, ia berfungsi. Sekarang mari kita lihat apa yang berlaku semasa kita mencuba dan menyusun ips.

Garis arahan

urutkan ips

Pengeluaran

76.88.194.157
8.96.11.181
82.169.213.206
84.218.132.51
84.3.101.97
87.137.131.40
87.59.32.91
89.149.111.242
97.121.162.244
98.145.130.186

Pada pandangan pertama, ia kelihatan berfungsi tetapi garis seperti 8.96.11.181 mesti muncul di tempat lain.

Perintah


untuk o in d h n V g M
buat
urutkan ips - $ o> ips $ o ,,
selesai

gema semua jenis nombor sama
diff ips n, d 1> / dev / null || susunan kamus echo != urutan angka
diff ips n, h 1> / dev / null || gema nombor berangka manusia != urutan angka
diff ips n, g 1> / dev / null || echo jenis numerik am != urutan angka
diff ips n, v 1> / dev / null ||
jenis versi echo != urutan angka
show_n_v_ips_diff = "benar"


ujian ! "$ show_n_v_ips_diff" || perbezaan ips n, v

Pengeluaran

macam-macam sama jenis angka
pesanan kamus != urutan angka
jenis versi != urutan angka
13,14d12
< 44.221.43.20
< 44.27.108.172
15a14,15
> 44.27.108.172
> 44.221.43.20
27d26
< 84.218.132.51
29c28
< 87.137.131.40

Seperti yang anda lihat jenis versi membolehkan anda menyusun nombor versi apabila kaedah penyortiran lain gagal.

Contoh) Urut versi - menyusun nama fail dengan nombor versi

Berdasarkan contoh terakhir, mari kita gunakan versi semacam lebih dekat dengan tujuannya. Seperti yang anda ketahui, nombor versi biasanya muncul dalam nama fail. Lihat Butiran mengenai jenis versi.

Pertama, mari kita ubah ips menjadi fail sumber projek seperti yang lain.

Perintah

alpha ()
alpha = "abcdefghijklmnopqrstuvwxyz";
echo -n $ alpha: $ ((RANDOM% 26)): 1

beta ()
alpha = "ab";
echo -n $ alpha: $ ((RANDOM% 2)): 1


kucing ips | sambil membaca baris -r; buat
echo $ (alpha) -v $ line $ (uji $ ((RANDOM% 5)) -eq 0 || beta).tar.gz;
selesai | tee meneguk

Pengeluaran

x-v56.16.109.54.tar.gz
k-v117.38.14.165a.tar.gz
d-v87.59.32.91a.tar.gz
h-v115.215.64.100.tar.gz
s-v72.174.246.218b.tar.gz
h-v163.93.19.173.tar.gz
u-v184.225.11.92b.tar.gz
y-v205.53.5.211a.tar.gz
t-v175.196.164.17b.tar.gz
e-v167.42.221.178b.tar.gz
c-v126.54.190.189b.tar.gz
b-v169.180.221.131a.tar.gz
y-v210.125.170.231a.tar.gz
x-v71.56.120.9b.tar.gz

Senaman

Jadikan perintah di atas berjalan lebih cepat menggunakan xargs

Lihat contoh cara menggunakan perintah xargs dalam skrip bash.

Kali ini, kita tidak akan repot-repot menggunakan kaedah penyortiran lain.

Garis arahan

urutkan -V menghirup

Pengeluaran

d-v127.100.108.192.tar.gz
e-v62.140.229.42a.tar.gz
e-v149.77.211.215a.tar.gz
e-v167.42.221.178b.tar.gz
e-v194.189.236.29a.tar.gz
e-v198.145.199.84b.tar.gz
e-v240.1.147.196b.tar.gz
f-v50.100.142.42b.tar.gz
f-v117.58.230.116.tar.gz
f-v139.17.210.68b.tar.gz
f-v153.18.145.133b.tar.gz
g-v201.153.203.60b.tar.gz
g-v213.58.67.108.tar.gz
h-v5.206.37.224.tar.gz

Sekarang anda melihat bahawa jenis versi mungkin berguna ketika menyusun nama fail dengan nombor versi.

Pre sort

Susun mempunyai empat pilihan utama yang mempengaruhi penyortiran sebenar iaitu, -ignore-terkemuka-kosong, -ignore-case, -ignore-nonprinting, dan -dictionary-order, yang mungkin atau mungkin tidak bertindih. Contoh menggunakan setiap pilihan ikuti.

Isih mengabaikan kekosongan utama

Isih membolehkan ruang kosong input diabaikan sebagai pilihan. Kekosongan utama disimpan dalam output yang disusun.

Pilihan

--mengabaikan-memimpin-kosong

Penggunaan

urutkan - kosong-terkemuka-utama

Perintah

terkenal-orang> fp
kucing >> fp << EOF
Marilyn Monroe (1926 - 1962)
Abraham Lincoln (1809 - 1865)
EOF
kucing fp | urutkan | tac

Pengeluaran

Alfred Hitchcock (1899 - 1980)
Albert Einstein (1879 - 1955)
Al Gore (1948 -)
Abraham Lincoln (1809 - 1865)
Marilyn Monroe (1926 - 1962)
Abraham Lincoln (1809 - 1865)

Perhatikan bahawa ruang utama dalam baris yang ditambahkan ke fp muncul pertama dalam output semacam.

Untuk membetulkannya, kita perlu mengabaikan kekosongan utama seperti berikut.

Perintah

terkenal-orang> fp
kucing >> fp << EOF
Marilyn Monroe (1926 - 1962)
Abraham Lincoln (1809 - 1865)
EOF
kucing fp | urutkan - kosong-terkemuka-kosong-kosong-terkemuka-kosong | tac

Pengeluaran

Marilyn Monroe (1926 - 1962)
Marilyn Monroe (1926 - 1962)
Marie Antoinette (1755 - 1793)

Albert Einstein (1879 - 1955)
Al Gore (1948 -)
Abraham Lincoln (1809 - 1865)
Abraham Lincoln (1809 - 1865)

Alternatif

kucing fp | sed 's / ^ \ s * //' | urutkan | tac

Perhatikan bahawa alternatif tidak mengekalkan kekosongan utama dalam output semacam.

Susun kes yang tidak diendahkan

Susun membolehkan kes input diabaikan sebagai pilihan. Kes ini disimpan dalam output yang disusun.

Pilihan

--abaikan-kes

Penggunaan

urutkan - kes-kesignore

Perintah

terkenal-orang> fp
kucing >> fp << EOF
abraham Lincoln (1809 - 1865)
ABraham Lincoln (1809 - 1865)
EOF
kucing fp | urutkan | tac

Pengeluaran

Amelia Earhart (1897 - 1937)
Alfred Hitchcock (1899 - 1980)
Albert Einstein (1879 - 1955)
Al Gore (1948 -)
Abraham Lincoln (1809 - 1865)
ABraham Lincoln (1809 - 1865)

Perhatikan bahawa ruang utama dalam baris yang ditambahkan ke fp muncul pertama dalam output semacam.

Untuk membetulkannya, kita perlu mengabaikan kekosongan utama seperti berikut.

Perintah

terkenal-orang> fp
kucing >> fp << EOF
abraham Lincoln (1809 - 1865)
ABraham Lincoln (1809 - 1865)
EOF
kucing fp | urutkan - kes-kesignore | tac

Pengeluaran

Amelia Earhart (1897 - 1937)
Alfred Hitchcock (1899 - 1980)
Albert Einstein (1879 - 1955)
Al Gore (1948 -)
Abraham Lincoln (1809 - 1865)
abraham Lincoln (1809 - 1865)
ABraham Lincoln (1809 - 1865)

Alternatif

kucing fp | sambil membaca baris -r; gema $ line ,,; selesai | urutkan | tac

Perhatikan bahawa alternatif tidak menyimpan kes dalam output semacam.

Isih tanpa mengira pencetakan

Isih membolehkan input yang tidak dicetak diabaikan sebagai pilihan. Nonprinting disimpan dalam output yang disusun.

Pilihan

--abaikan-tidak mencetak

Penggunaan

menyusun --ignore-nonprinting

Perintah

terkenal-orang> fp
echo -e "\ x90Abe" >> fp
kucing fp | urutkan | tac

Pengeluaran

Audrey Hepburn (1929 - 1993)
Angelina Jolie (1975 -)
Amelia Earhart (1897 - 1937)
Alfred Hitchcock (1899 - 1980)
Albert Einstein (1879 - 1955)
Al Gore (1948 -)
Abraham Lincoln (1809 - 1865)

Nampaknya kita tidak mempunyai watak 'Abe' untuk mencetak watak dalam input semacam.

Untuk membetulkannya, kita perlu mengabaikan watak yang tidak dicetak.

Perintah

terkenal-orang> fp
echo -e "\ x90Abe" >> fp
kucing fp | urutkan --ignore-nonprinting | tac
[/ cc \
Pengeluaran
[cc lang = "bash"]
Amelia Earhart (1897 - 1937)
Alfred Hitchcock (1899 - 1980)
Albert Einstein (1879 - 1955)
Al Gore (1948 -)
Abraham Lincoln (1809 - 1865)
▒Boleh

Susun urutan kamus

Urutkan membolehkan semua input diabaikan kecuali spasi dan aksara alfanumerik sebagai pilihan. Input dikekalkan dalam output yang disusun.

terkenal-orang> fp
echo -e "\ x90Abe" >> fp
kucing fp | urutkan --d | tac

Hantar siaran

Urutkan mempunyai satu pilihan utama yang tidak mempengaruhi penyortiran iaitu, -reverse. Walau bagaimanapun, ia mempengaruhi output, membiarkan urutan beralih antara menaik dan menurun. Contohnya berikut.

Isih output terbalik

Urutkan membolehkan output ditampilkan dalam urutan terbalik sebagai pilihan.

Pilihan

--terbalik

Penggunaan

urutkan - terbalik

Garis arahan

terkenal-orang | urutkan - terbalik

Pengeluaran

Angelina Jolie (1975 -)
Amelia Earhart (1897 - 1937)
Alfred Hitchcock (1899 - 1980)
Albert Einstein (1879 - 1955)
Al Gore (1948 -)
Abraham Lincoln (1809 - 1865)

Alternatif

urutkan | tac

Pilihan lain untuk mengurutkan

Terdapat dua puluh dua pilihan lain. Contohnya diikuti.

Susun semak

Urutkan mempunyai pilihan yang membolehkan anda memeriksa apakah input disusun. Ia kembali selepas contoh pertama baris yang tidak disusun. Sekiranya input diperlukan untuk disusun tetapi kemungkinan sudah teratur, menggunakan pemeriksaan semacam itu sesuai.

Pilihan

--periksa

Penggunaan

urutkan - semak

Garis arahan

seq 10 | susun - jenis-rawak | urutkan - semak

Pengeluaran

urutkan: -: 3: gangguan: 10

Garis arahan

seq 10 | susun - jenis-rawak | urutkan | urutkan - semak

Pengeluaran

(kosong)

Isih output

Urutkan mempunyai pilihan yang membolehkan anda menentukan fail untuk ditulis dan bukannya menggunakan output standard atau pengalihan semula. Penggunaannya dapat meningkatkan keserasian di seluruh persekitaran skrip.

Pilihan

--output = FILE

Penggunaan

urutkan - output = FILE

Garis arahan

seq 10 | urutkan - rawak-jenis - output = rawak-10

Pengeluaran

(kosong)

Isih batal ditamatkan

Urutkan mempunyai pilihan yang membolehkan anda menetapkan pembatas garis menjadi nol dan bukannya garis baru.

Pilihan

--ditamatkan sifar

Penggunaan

urutkan - ditamatkan sifar

Garis arahan

seq 10 | tr '\ 012' '\ 000' | urutkan - diakhiri sifar - urut secara rawak

Pengeluaran

25346178910

Isih stabil

Urutkan mempunyai pilihan yang membolehkan anda melumpuhkan perbandingan pilihan terakhir. Akibatnya, jangka masa yang lebih stabil dapat dicapai sekiranya input yang cukup besar dapat menyebabkan proses berjalan tidak stabil.

Pilihan

--stabil

Penggunaan

susun - stabil

Garis arahan

masa seq 1000000 | susun - jenis-rawak | susun --stabil> / dev / null

Pengeluaran

sebenar 0m9.138an
pengguna 0m9.Tahun 201an
sys 0m0.107s

Susun ukuran penyangga

Urutkan mempunyai pilihan yang membolehkan anda menetapkan jumlah memori yang digunakan sebagai penyangga semasa menyusun. Ini dapat digunakan untuk membatasi penggunaan memori menyusun input yang lebih besar. Prestasi mungkin terjejas.

Pilihan

--ukuran penyangga = SAIZ

Penggunaan

susun - ukuran belian = 64

Garis arahan

masa seq 1000000 | urut-rawak-urut | sort -stable -buffer-size = 64> / dev / null

Pengeluaran

sebenar 0m21.685an
pengguna 0m9.858-an
sys 0m2.092s

Susun unik

Urutkan mempunyai pilihan yang membolehkan anda membuang baris pendua dalam output semacam

Pilihan

--unik

Penggunaan

jenis - unik

Garis arahan

gema 1 2 2 4 5 | tr '\ 040' '\ 000' | susun - ditamatkan sifar - unik

Pengeluaran

1245

Alternatif

urutkan | uniq

Kesimpulannya

Urutkan adalah perintah luaran yang berguna bukan hanya ketika digunakan dalam kombinasi dengan perintah luaran yang lain tetapi juga berguna ketika digunakan dengan perintah tanpa kaedah pesanan terbina dalam seperti fungsi yang ditentukan pengguna atau skrip bash secara umum.

Tutorial Battle for Wesnoth
The Battle for Wesnoth adalah salah satu permainan strategi sumber terbuka paling popular yang boleh anda mainkan pada masa ini. Bukan hanya permainan...
0 A.D. Tutorial
Daripada banyak permainan strategi di luar sana, 0 A.D. berjaya menonjol sebagai tajuk yang komprehensif dan permainan taktikal yang sangat mendalam w...
Tutorial Unity3D
Pengenalan Unity 3D Unity 3D adalah enjin pengembangan permainan yang kuat. Ini adalah platform silang yang memungkinkan anda membuat permainan untuk ...