GNU/Linux >> Tutoriels Linux >  >> Linux

Pipeline Sed ne fonctionne pas sur le nom de fichier trouvé à l'intérieur de la substitution de commande Bash lorsqu'il est invoqué à partir de Find "-exec" ?

Cette question a déjà des réponses ici :if command in find -exec

(2 réponses)
Fermé il y a 11 mois.

Il semble que "find", "bash" et "sed" dans certains cas ne fonctionnent pas comme prévu.

L'exemple suivant doit d'abord créer le fichier 'sample.txt', puis trouver le fichier et enfin le traiter par la commande '-exec'. La commande exécutée imprime le nom du fichier trouvé, les éprouvettes et le nom du fichier modifié. La commande 'sed' elle-même est utilisée pour remplacer 'txt' par 'TXT'.

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

La sortie attendue est :

./sample.txt Spécimen_avant.TXT ./sample.TXT Spécimen_après.TXT

Au lieu de cela, il produit :

./sample.txt Spécimen_avant.TXT ./sample.txt Spécimen_après.TXT

(l'exemple a également été testé avec une substitution de commande à l'ancienne via des guillemets inversés '`' avec le même résultat)

Qu'est-ce que je fais de mal ?

Réponse acceptée :

La substitution de commande est exécutée avant find commence même. La commande réellement exécutée (après substitutions, extensions et suppressions de guillemets, etc.) est

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

Si vous avez besoin d'exécuter quelque chose fantaisie (tuyaux ou commandes multiples) avec -exec , puis démarrez un shell séparé pour le faire :

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. Commande introuvable dans Bash corrigé

  2. Pourquoi la saisie semi-automatique ne fonctionne-t-elle pas lors de la saisie d'un nom de commande après `source` ?

  3. La commande Rm dans le script Bash ne fonctionne pas avec la variable ?

  4. Commande introuvable dans Zsh, mais trouvée dans Bash ?

  5. bash :netstat :commande introuvable.

Dépannage de l'erreur "Bash :Commande introuvable" sous Linux

sed :commande introuvable

Pourquoi find -exec mv {} ./target/ + ne fonctionne-t-il pas ?

La correspondance de modèle ne fonctionne pas dans le script bash

commande introuvable lors de l'utilisation de sudo

Qu'est-ce que -bash:!:événement introuvable