GNU/Linux >> Belajar Linux >  >> Linux

Pipelined Sed Tidak Bekerja Pada Nama File yang Ditemukan Di Dalam Substitusi Perintah Bash Saat Dipanggil Dari Temukan "-exec"?

Pertanyaan ini sudah memiliki jawaban di sini :if perintah di find -exec

(2 jawaban)
Tutup 11 bulan lalu.

Sepertinya 'find', 'bash' dan 'sed' dalam beberapa kasus tidak berfungsi seperti yang diharapkan.

Contoh berikut pertama-tama harus membuat file 'sample.txt', kemudian menemukan file dan akhirnya memprosesnya dengan perintah '-exec'. Perintah yang dieksekusi mencetak nama file yang ditemukan, spesimen uji, dan nama file yang dimodifikasi. Perintah 'sed' sendiri digunakan untuk mengganti 'txt' menjadi 'TXT'.

touch sample.txt
find ./ -maxdepth 1 -name "*.txt" -exec echo {} $(echo Specimen_before.txt {} Specimen_after.txt |sed -e "s/txt/TXT/g") ;

Keluaran yang diharapkan adalah:

./sample.txt Specimen_before.TXT ./sample.TXT Specimen_after.TXT

Sebaliknya ia menghasilkan:

./sample.txt Specimen_before.TXT ./sample.txt Specimen_after.TXT

(contoh telah diuji juga dengan substitusi perintah jadul melalui backquotes ''`' dengan hasil yang sama)

Apa yang saya lakukan salah?

Jawaban yang Diterima:

Substitusi perintah dijalankan sebelum find bahkan dimulai. Perintah aktual yang dijalankan (setelah penggantian, perluasan, penghapusan kutipan, dll.) adalah

find ./ -maxdepth 1 -name *.txt -exec echo {} Specimen_before.TXT {} Specimen_after.TXT ;

Jika Anda perlu menjalankan apa saja mewah (pipa atau beberapa perintah) dengan -exec , lalu mulai shell terpisah untuk melakukannya:

find . -maxdepth 1 -type f -name '*.txt' 
    -exec sh -c 'printf "%s " "$1"; printf "%s %s %sn" "before.txt" "$1" "after.txt" | sed "s/txt/TXT/g"' sh {} ';'

Linux
  1. Perintah Tidak Ditemukan di Bash Tetap

  2. Mengapa Pelengkapan Otomatis Tidak Berfungsi Saat Mengetik Nama Perintah Setelah `sumber`?

  3. Perintah Tidak Ditemukan Di Zsh, Tetapi Ditemukan Di Bash?

  1. bash:netstat:perintah tidak ditemukan.

  2. sed:perintah tidak ditemukan

  3. Mengapa find -exec mv {} ./target/ + tidak berfungsi?

  1. [Memperbaiki] bash:Sudo:perintah tidak ditemukan

  2. bash - membuat perintah tidak ditemukan

  3. Pencocokan pola tidak berfungsi dalam skrip bash