J'utilise ubuntu 14.4
et tente de rediriger la sortie de la grep
commande vers un fichier, mais je reçois toujours cette erreur:
grep: input file 'X' is also the output
J'ai recherché ce problème et je viens de découvrir qu'il s'agissait d'un bogue ubuntu 12.4
et qu'il n'y a pas de description, quelqu'un peut-il m'aider à résoudre ce problème?
J'exécute la commande suivante:
grep -E -r -o -n r"%}(.*){%" > myfile
shell
ubuntu
command-line
grep
io-redirection
Kasramvd
la source
la source
grep pattern file > file
cela ne fonctionne pas. Vous ne pouvez pas utiliser le même fichier comme entrée et sortie pour grep.bash: ../f.txt: Permission denied
grep
dans la commandegrep pattern file > file
voit un fichier déjà vide, n'a donc rien en entrée. Cependant, si vous utilisez à la>>
place de>
alors le fichier n'est pas vide, mais grep renvoie de toute façon une erreur car cela peut conduire à un traitement récursif de la même ligne (modèle) encore et encore.Réponses:
Il n'est pas possible d'utiliser le même fichier en entrée et en sortie pour
grep
. Vous pouvez envisager les alternatives suivantes:Fichier temporaire
sed
mettre tout le fichier dans la variable (idée pas brillante pour les gros fichiers)
la source
sed -i '/pattern/!d' file
sed -i -n 's/.*\(pattern\).*/\1/p' file
sed
syntaxe.Vous pouvez utiliser le
--exclude
champ dans votregrep
commande comme ceci:la source
myfile
est unique car il ne s'applique qu'au nom de base du fichier. Vous ne voulez pas ignorer les fichiers portant le même nom dans d'autres répertoires.J'ai trouvé un moyen de bash:
cat >> IN_OUTPUT_FILE <<< "$(grep something IN_OUTPUT_FILE)"
La commande dans
<<<"..."
sera exécutée en premier.la source