Android

Bash'da bir dosyayı satır satır okuma

Bash vs Python для DevOps инженеров и системных администраторов

Bash vs Python для DevOps инженеров и системных администраторов

İçindekiler:

Anonim

Bash komut dosyaları yazarken, bazen bir dosyayı satır satır okumanız gereken durumlarda bulacaksınız. Örneğin, komut dosyası tarafından işlenmesi gereken verileri içeren bir metin dosyanız olabilir.

Bu derste, Bash'te bir dosyayı satır satır nasıl okuyacağımızı tartışacağız.

Dosya Satırına Göre Sözdizimi Okuma

Dosyayı satır satır okumak için en genel sözdizimi aşağıdaki gibidir:

while IFS= read -r line do echo "$line" done < input_file

veya eşdeğer tek satırlı sürüm:

while IFS= read -r line; do echo $line; done < input_file

O nasıl çalışır?

Girdi dosyası ( input_file ), read komutuyla read için açık olmasını istediğiniz dosyanın adıdır. read komutu, her satırı line değişkenine atayarak dosyayı satır satır okur. Tüm satırlar işlendikten sonra while döngüsü sonlanır. Dahili alan ayırıcısı ( IFS ), read komutunun varsayılan davranışı olan öndeki ve arkadaki boşlukları korumak için boş dizeye ayarlanır.

Dosyayı Satır Satır Örnekleriyle Okuma

Aşağıdaki örneğe bakalım. En popüler Linux dağıtımlarından bazılarının ve virgül ( , ) ile ayrılmış paket yöneticilerinin bir listesini içeren distros.txt adında bir dosyamız olduğunu varsayalım:

distros.txt

Ubuntu, apt Debian, apt CentOS, yum Arch Linux, pacman Fedora, dnf

Dosyayı satır satır okumak için terminalinizde aşağıdaki kodu çalıştırırsınız:

while IFS= read -r line do echo "$line" done < distros.txt

Kod, dosyayı satır satır okuyacak, her satırı bir değişkene atayacak ve değişkeni yankılayacaktır. Temel olarak, cat içeriğini kullanarak dosya içeriğini görüntüleyeceğinizle aynı çıktıyı görürsünüz.

Yalnızca apt kullanan dağıtımları yazdırmak isterseniz ne olur? Bunun bir yolu if ifadesini kullanmak ve satırın apt alt dizesini içerip içermediğini kontrol etmektir:

while IFS= read -r line do if]; then echo "$line" fi done < distros.txt

Ubuntu, apt Debian, apt

Dosyayı satır satır okurken, satırı IFS temel alan alanlara ayıracak olan okuma komutuna birden fazla değişken de iletebilirsiniz. İlk alan ilk değişkene, ikincisi ikinci değişkene atanır ve bu böyle devam eder. Değişkenlerden daha fazla alan varsa, kalan alanlar son değişkene atanır.

Aşağıdaki örnekte, IFS'yi virgül ( , ) olarak ayarlıyoruz ve iki değişken distro ve distro read komutuna distro . Satırın başlangıcından ilk virgüle kadar her şey ilk değişkene ( distro ) ve hattın geri kalanı ikinci değişkene ( pm ) atanacaktır:

while IFS=, read -r distro pm do echo "$pm" is the package manager for "$distro" done < distros.txt

apt is the package manager for Ubuntu apt is the package manager for Debian yum is the package manager for CentOS pacman is the package manager for Arch Linux dnf is the package manager for Fedora

Alternatif Dosya Okuma Yöntemleri

İşlem Değiştirme Kullanma

İşlem ikamesi, komuttan çıktıyı bir dosya adı olarak geçirmenizi sağlar:

while IFS= read -r line do echo "$line" done < <(cat input_file)

Here Dizesini Kullanma

Here: String, Here belgesinin bir çeşididir. Dize (cat input_file) yeni satırları saklar:

while IFS= read -r line do echo "$line" done <<< $(cat input_file)

Dosya tanımlayıcıyı kullanma

Bir dosya tanımlayıcı kullanarak döngüye girişi de sağlayabilirsiniz:

while IFS= read -r -u9 line do echo "$line" done 9< input_file

Dosya tanımlayıcılarıyla çalışırken, kabuk dahili dosya tanımlayıcılarıyla çakışmayı önlemek için 4 ile 9 arasında bir sayı kullanın.

Sonuç

Bash'te, bir while okuma döngüsüne giriş olarak dosya adını girerek bir dosyayı satır satır okuyabiliriz.

bash terminali