2009-06-09 4 views

Répondre

206

Utilisez cut. Par exemple. pour dépouiller les 4 premiers caractères de chaque ligne (ie commence le 5 char):

tail -f logfile | grep org.springframework | cut -c 5- 
+0

avez-vous une idée de pourquoi le tuyau ne fonctionne pas? quand je cours essentiellement cette commande, 'couper' n'imprime pas les résultats sur stdout ... si je lance juste 'tail -f logfile | couper -c 5- 'je peux voir les résultats ... le problème doit être avec grep j'utilise cygwin FYI merci – les2

+0

que se passe-t-il si vous n'ajoutez pas le dernier tuyau et couper? fondamentalement, si vous supprimez la dernière partie de la ligne? – LB40

+0

il "queue" le fichier journal, le filtrant avec grep (ie, toutes les lignes avec "org.springframework" dans eux sont imprimés à stdout) quand j'ajoute le tuyau à «couper» ... il pend TOUTEFOIS, si j'élimine 'grep' la 'coupe' fonctionne correctement ... je pense que quelque chose ne va pas avec comment j'utilise grep ... pourrait être une chose de cygwin aussi – les2

2
tail -f logfile | grep org.springframework | cut -c 900- 

supprimerait les 900 premiers caractères

cut utilise 900- pour montrer le caractère 900e à la fin de la ligne

cependant quand je conduit tout cela grâce à grep Je ne comprends pas quoi que ce soit

+4

"cut -c 1-900" ne sera pas "enlever les 900 premiers caractères" - - il ne restera que les 900 premiers caractères.Si vous voulez supprimer les 900 premiers caractères, utilisez "cut -c 901-" – iammichael

+0

aussi c'est 900 premiers caractères sur chaque ligne, par la réponse @ iammichael –

30
sed 's/^.\{5\}//' logfile 

et vous remplacez 5 par le numéro que vous voulez ... il devrait faire l'affaire ...

EDIT si pour chaque ligne sed 's/^.\{5\}//g' logfile

+0

cela devrait être plutôt 'sed 's/^. \ {, 5 \} //' logfile' – user3719454

12

Vous pouvez utiliser cut:

cut -c N- file.txt > new_file.txt 

-c: caractères

de fichiers d'entrée file.txt:

new_file.txt: du fichier de sortie

N-: caractères de N pour mettre fin à couper et la sortie vers le nouveau fichier. Peut aussi avoir d'autres arguments comme: 'N', 'N-M', '-M' signifiant nième caractère, nième à mième caractère, premier à mème caractère respectivement.

Ceci effectuera l'opération sur chaque ligne du fichier d'entrée.

+4

Utilisation inutile de' cat', ' couper file.txt -cN-> nouveau_fichier.txt' fonctionnera aussi bien – ChrisWue

1

Je pense que awk serait le meilleur outil pour cela car il peut à la fois le filtre et remplir les fonctions de manipulation de chaînes nécessaires sur les lignes filtrées:

tail -f logfile | awk '/org.springframework/ {print substr($0, 6)}' 

ou

tail -f logfile | awk '/org.springframework/ && sub(/^.{5}/,"",$0)' 
0

Voici fonction simple, testé à bash. 1er param de la fonction est une chaîne, 2ème param est le nombre de caractères à décaper

function stringStripNCharsFromStart { echo ${1:$2:${#1}} }

Utilisation: enter image description here

Questions connexes