tail -f /var/log/kern.log | sed 's/.* //'
Me donne la sortie sur le terminal mais quand je le fais
tail -f /var/log/kern.log | sed 's/.* //' >> logfile.txt
je ne trouve rien dans le fichier. À partir du module du noyau, j'imprime les noms des exécutables. Pour exemple , si je cours ls
, kern.log
a /bin/ls
mais avec l'horodatage , etc. Donc im essayant ci - dessus pour extraire uniquement le chemin et il fonctionne aussi longtemps que je le lance sans redirection vers un fichier de sortie, j'ai essayé tee logfile.txt
. Toujours rien. S'il vous plaît aider.
Le problème avec votre commande sed est que vous prenez "tout ce qui est suivi d'un espace" (le ".*") et que vous le remplacez par "rien". Ce que vous devez faire est de tout saisir jusqu'au premier espace et de l'enregistrer, puis de tout remplacer par le bit enregistré. Pour enregistrer une partie de votre chaîne d'entrée, vous mettez cette partie de l'expression régulière entre parenthèses : (.*)
Cela peut ensuite être mis dans la chaîne de remplacement à l'aide de \1
.
Mais il y a plus que cela. sed est gourmand -- il en saisira autant qu'il le pourra. Ainsi, lorsque vous avez une chaîne comme "abc def ghi", il verra que "abc def" est suivi d'un espace et saisira tout cela. La question est donc de savoir comment obtenir uniquement la première partie, jusqu'au premier espace ?
Vous pouvez sélectionner tous les caractères qui ne sont pas votre délimiteur (l'espace) qui sont suivis d'un espace. Donc dans l'exemple ci-dessus, parce que le caractère entre c et d est un espace, il ne sera pas sélectionné et seule la partie abc le sera.
Donc ce que vous obtenez est ceci :
sed "s/\([^ ]*\) .*/\1/"`
où le motif de correspondance consiste en "tout ce qui n'est pas un espace, autant qu'il y en a" (qui est entre parenthèses pour l'enregistrer) "([^ ]\*)"
, un seul espace " "
, puis tout le reste ".*"
. La chaîne de remplacement "\1"
est "tout ce qui correspond à la partie de l'expression régulière dans le premier ensemble de parenthèses".
Voici un test rapide que j'ai fait :
Testing: cat testout.txt
cat: testout.txt: No such file or directory
Testing: cat testin.txt
abc def ghi
asdf jkl; fdsa ;lkj qwerty 123
Once upon a time
When in the course
Testing: cat testin.txt | sed "s/\([^ ]*\) .*/\1/" >> testout.txt
Testing: cat testout.txt
abc
asdf
Once
When
Testing: cat testin.txt | sed "s/\([^ ]*\) .*/\1/" >> testout.txt
Testing: cat testout.txt
abc
asdf
Once
When
abc
asdf
Once
When
Testing:
Il commence avec rien dans testout.txt et 4 lignes dans testin.txt . Ensuite, il envoie le contenu de testin.txt à sed avec la sortie ajoutée à un fichier. Ensuite, il affiche le contenu. Je l'ai refait, alors, pour montrer que c'est vraiment une annexe (il y a maintenant 8 lignes dans testout.txt , deux ensembles de 4.) (Remarque : j'ai ajouté des lignes vides juste pour faciliter la lecture.)
S'il vous plaît laissez-moi savoir si vous avez des questions.
J'espère que cela t'aides!
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots