Grepping stdin et de la tuyauterie pour le sed ne semble pas fonctionner
Je suis en train de filtre et de le remplacer une norme d'entrée dans le but de capturer uniquement des chaînes de caractères spécifiques tordu vers mon goût. Par exemple, dire que le standard de la chaîne d'entrée est
"KB: the system ran into a critical error"
Alors je vais grep cette ligne, changement", KB:""###", puis la sortie vers STDOUT tels que
"### the system ran into a critical error"
J'ai essayé dans Fedora 12 (et en fait dans de nombreux autres)
$ grep "KB:" - | sed -e 's/KB:/###/g'
KB: the system ran into a critical error <--- This is what I typed in manually.
<--- Nothing is printed
J'ai créé un fichier texte, text.txt que contient le même exemple de chaîne, puis avait grep
lire à partir du fichier comme:
$ grep "KB:" text.txt | sed -e 's/KB:/###/g'
### the system ran into a critical error <--- Correctly displayed
$
Quelle serait la différence observée à partir de l'intérieur de grep/sed
et pourquoi le STDIN méthode ne fonctionne pas? Plutôt que d'entendre parler des alternatives comme l'utilisation de xargs
etc, je veux savoir pourquoi j'essaie d'échec.
OriginalL'auteur KB Kim | 2012-05-14
Vous devez vous connecter pour publier un commentaire.
Cela fonctionne pour moi:
echo "KB: the system ran into a critical error" | grep "KB:" | sed -e 's/KB:/###/g'
noter l'exclusion de la
-
personnage dans legrep
commande.Et à l'aide de
grep
est inutile ici. Vous pouvez couper votre code jusqu'à la taille:echo "KB: the system ran into a critical error" | sed -e 's/KB:/###/g'
### the system ran into a critical error
OriginalL'auteur Steve