Cara menggunakan grep saat file tidak mengandung string


26

Dalam skrip bash saya, saya mencoba untuk mencetak garis jika string tertentu tidak ada dalam file.

if grep -q "$user2" /etc/passwd; then
    echo "User does exist!!"

Ini adalah bagaimana saya menulisnya jika saya ingin string ada di file tetapi bagaimana saya bisa mengubah ini untuk membuatnya mencetak "pengguna tidak ada" jika pengguna tidak ditemukan dalam file / etc / passwd?

Jawaban:


49

grepakan mengembalikan kesuksesan jika menemukan setidaknya satu contoh dari pola dan kegagalan jika tidak. Jadi Anda bisa menambahkan elseklausa jika Anda ingin keduanya "tidak" dan "tidak" dicetak, atau Anda bisa meniadakan ifkondisi hanya untuk mendapatkan kegagalan. Contoh masing-masing:

if grep -q "$user2" /etc/passwd; then
    echo "User does exist!!"
else
    echo "User does not exist!!"
fi

if ! grep -q "$user2" /etc/passwd; then
    echo "User does not exist!!"
fi

2

Alternatifnya adalah mencari status keluar dari grep. Sebagai contoh:

grep -q "$user2" /etc/passwd
if [[ $? != 0 ]]; then
    echo "User does not exist!!"

Jika grepgagal menemukan kecocokan maka akan keluar 1, demikian $?juga halnya 1. grepakan selalu kembali 0jika berhasil. Jadi lebih aman untuk digunakan $? != 0daripada $? == 1.


ini benar-benar cara yang lebih lama untuk mengatakan apa yang Eric katakan .
Jeff Schaller

Nah, bagi saya if ! grep ...pernyataan negatif itu tidak berhasil. Jadi ini merupakan alternatif.
ssanch

1

Saya menyelesaikannya dengan liner sederhana:

for f in *.txt; do grep "tasks:" $f || echo $f; done

Perintah akan memeriksa semua file dalam direktori dengan ekstensi txt dan menulis string pencarian (yaitu "tugas:") jika ditemukan atau nama file tersebut.


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.