GNU/Linux >> Linux Esercitazione >  >> Linux

Pipelined Sed non funziona sul nome del file trovato all'interno della sostituzione del comando Bash quando viene richiamato da Trova "-exec"?

Questa domanda ha già risposte qui :if comando in find -exec

(2 risposte)
Chiuso 11 mesi fa.

Sembra che "trova", "bash" e "sed" in alcuni casi non funzionino come ci si aspetta.

L'esempio seguente dovrebbe prima creare il file "sample.txt", quindi trovare il file e infine elaborarlo con il comando "-exec". Il comando eseguito stampa il nome del file trovato, i campioni di prova e il nome del file modificato. Il comando 'sed' stesso viene utilizzato per sostituire 'txt' in 'TXT'.

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

L'output previsto è:

./sample.txt Campione_prima.TXT ./campione.TXT Campione_dopo.TXT

Invece produce:

./sample.txt Campione_prima.TXT ./campione.txt Campione_dopo.TXT

(l'esempio è stato testato anche con la sostituzione dei comandi della vecchia scuola tramite virgolette "`" con lo stesso risultato)

Cosa sbaglio?

Risposta accettata:

La sostituzione del comando viene eseguita prima di find anche inizia. Il comando effettivo eseguito (dopo sostituzioni, espansioni e rimozioni di preventivi ecc.) è

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

Se devi eseguire qualsiasi cosa fantasia (pipe o comandi multipli) con -exec , quindi avvia una shell separata per farlo:

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. [Risolto] bash:sudo:comando non trovato

  2. Comando non trovato in Bash risolto

  3. Perché la sostituzione del processo Bash non funziona con alcuni comandi?

  4. Perché il completamento automatico non funziona quando si digita un nome di comando dopo "source"?

  5. Comando non trovato in Zsh, ma trovato in Bash?

Risoluzione dei problemi di errore "Bash:comando non trovato" in Linux

bash sh - comando non trovato

GLIBCXX_3.4.9 non trovato durante l'esecuzione di ffmpeg da php nel server lampp

gdb non raggiunge alcun punto di interruzione quando lo eseguo dall'interno del contenitore Docker

comando non trovato quando si utilizza sudo

Cos'è -bash:!:evento non trovato