Je sais lire les n dernières lignes d’un fichier avec 'tail -n’
Je sais trouver une occurrence dans un fichier avec 'grep’
MAIS, je ne sais pas conjuguer les deux tris :
lire dans les 20 dernières lignes de /chemin/fichier toutes les lignes ayant 'mot’
Merci
:question: :question: :question:
Ben c’est ce que j’ai essayé et ça ne répond pas à mes attentes
Je vais retester sur un autre fichier.
Pourtant ça correspond bien à ta description de ton besoin.
OK, testé sur u autre fichier et ça fonctionne bien.
Je referai un essai demain sur le ‘log’ qui m’intéresse, j’ai du faire une faute de frappe qq part
Merci
Pendant que j’y suis :
commande pour trouver la première ligne qui comporte “mot” dans /chemin/fichier
et seulement cette 1ère ligne, avec son N° si possible.
Même principe :
Pour le dernier en awk pour le fun :
Merci à vous, vous êtes des anges
J’avais fait une erreur car j’ai réessayé ce matin et ça fonctionne bien sûr.
Y’aura d’autres demandes
Une autre donc :
supprimer un champ dans un fichier, en connaissant le N° de la 1ère ligne et le N° de la dernière ligne (la dernière ligne pouvant éventuellement être la dernière du fichier)
Supprimer les lignes 10 à 20 (inclue des deux cotés) :
Supprimer les 20 première lignes :
Ne garder que les 9 premières lignes :
Super cette commande
Je n’ai pas réussi à trouver dans les tutos.
Le plus compliqué pour moi, c’est de savoir quoi chercher.
Dans celui-là, par exemple, quel est le paragraphe concerné pour ce genre de travail sur des fichiers :
http://abs.traduc.org/abs-fr/
Merci Michel, bonne nuit !
Je sais pas trop, je l’ai regardé un peu vite.
Grosso modo il existe 3 commandes de manipulation de texte : grep, sed et awk.
grep filtre en fonction d’un motif
sed manipule à partir d’expression régulière (ça permet de réellement modifier le texte par exemple)
awk peut faire tout ce que grep fais (c’est aussi vrai pour sed, mais en moins pratique), il peut aussi découper une ligne pour en faire ce que tu veut (un peu comme cut mais en 100 fois plus puissant)
Merci, je retiens sed et awk … grep, je connais déjà un peu.
Il y a aussi cut qui permet avec une syntaxe differente et peut-etre plus simple d’extraire des champs de fichiers avec séparateur, exemple :
en awk :
en sed :
tout le monde y trouve son compte… perso, instinctivement, j’utilise sed…
une remarque sur grep : le motif peut-être une expression réguliaire :
ex, pour lister les processus de root, il faut faire :
et non :
et si je pipe avec un nombre de ligne retourner :
nico@nc10b:~$ ps aux |grep ^root |wc -l
83
nico@nc10b:~$ ps aux |grep root |wc -l
84
sinon, je me souviens une fois ou j’avais eu besoin d’extraire une partie d’un fichier, genre de la ligne 6 à la ligne 10 … j’avais fait un genre :
head -n 10 /path/fichier |tail -n 5
Toutes ces réponses sont intéressantes et je les note.
Une question bête, sur laquelle je n’ai pas encore cherché :
la commande indiquée par Michel fonctionne bien mais peut-on y ajouter, dans la même ligne (ou sur une autre dans un script) la sauvegarde du fichier ainsi modifié ?
Si tu souhaites sauvegarder le résultat d’une commande dans un fichier, il faut alors utiliser la redirection du flu de sortie :
c’est bien ça que tu souhaites faire ?
on peu aussi faire :
cela permet de ne pas ecraser le contenu de “nom_fichier_resultant” mais de placer le resultat de la commande “à la suite” …
[quote=“nilux17”]Il y a aussi cut qui permet avec une syntaxe differente et peut-etre plus simple d’extraire des champs de fichiers avec séparateur, exemple :
en awk :
en sed :
Là pour sed c’est un cas particulier. Si tu veux récupérer dossier home des utilisateurs, c’est déjà moins agréable :
cut -d : -f 5 /etc/passwd
awk -F":" '{print $5}' /etc/passwd
sed "s/^.*:\(.*\):.*$/\1/" /etc/passwd
Moi aussi maintenant, maintenant j’essaie d’utiliser awk à chaque fois que c’est pertinent.
[quote=“nilux17”]et si je pipe avec un nombre de ligne retourner :
nico@nc10b:~$ ps aux |grep ^root |wc -l
83
nico@nc10b:~$ ps aux |grep root |wc -l
84
[/quote]
wc ne sert à rien ici :
[quote=“nilux17”]sinon, je me souviens une fois ou j’avais eu besoin d’extraire une partie d’un fichier, genre de la ligne 6 à la ligne 10 … j’avais fait un genre :
head -n 10 /path/fichier |tail -n 5
[/quote]
En principe awk est à la fois plus flexible/pratique et plus performant.
[quote=“ricardo”]Toutes ces réponses sont intéressantes et je les note.
Une question bête, sur laquelle je n’ai pas encore cherché :
la commande indiquée par Michel fonctionne bien mais peut-on y ajouter, dans la même ligne (ou sur une autre dans un script) la sauvegarde du fichier ainsi modifié ?[/quote]
Tu ne peux pas directement. Il faut passer par un fichier temporaire.
Tu ne peux pas faire :
Merci Michel, je n’aurais pas trouvé ça tout seul.
Ça fait un peu comme quand je copie qq chose vers mon serveur, je passe d’abord par /tmp.