logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).


L'icône rouge permet de télécharger chaque page du wiki visitée au format PDF et la grise au format ODT → ODT PDF Export

Ceci est une ancienne révision du document !


Utiliser conjointement cut ; wc ; grep ; sed

Synthèse sur cut

Soit les trois dernières lignes du fichier /etc/passwd :

cat /etc/passwd
Debian-gdm:x:112:120:Gnome Display Manager:/var/lib/gdm3:/bin/false
hypathie:x:1000:1000:Hypathie,,,:/home/hypathie:/bin/bash
libvirt-qemu:x:113:122:Libvirt Qemu,,,:/var/lib/libvirt:/bin/false
  • Un champ est une chaîne de caractères
    Par exemple, la dernière ligne ci-dessus est composée de sept champs; libvirt-qemu ; x ; 113, etc.
  • Un délimiteur est ce qui sépare chaque champ
    ci-dessus c'est :.

Introduction

La commande cut permet d'afficher des zones spécifiques d'un fichier.

cut [options] [fichier...]

option -c

Sélection par caractère.

Exemples

Le premier caractère des trois dernières lignes
cut -c 1 /etc/passwd
D
h
l
Du premier au neuvième caractère
cut -c -9 /etc/passwd
Debian-gd
hypathie:
libvirt-q
Du neuvième au dernier caractère
cut -c 9- /etc/passwd
dm:x:112:120:Gnome Display Manager:/var/lib/gdm3:/bin/false
:x:1000:1000:Hypathie,,,:/home/hypathie:/bin/bash
qemu:x:113:122:Libvirt Qemu,,,:/var/lib/libvirt:/bin/false
Du onzième au vingt-et-unième caractère
cut -c 11-21 /etc/passwd
:x:112:120:
:1000:1000:
mu:x:113:12
cut -c 1-9,11-21 /etc/passwd
saned:x:11:119::/hom
Debian-gd:x:112:120:
hypathie::1000:1000:
libvirt-qmu:x:113:12

À savoir

Découpages par caractère significations
cut -c -n du caractère 1 à n
cut -c n- de n jusqu'à la fin
cut -c n-m de n à m
cut -c n-m,i-j de n à m et de i à j

Options -d et -f

Découpage par champ (ou colonne), en fonction du délimiteur -d Et liste des champs “”-f“”.

À savoir.
Par défaut, le délimiteur est la tabulation.
Si dans le fichier à traiter le séparateur est la tabulation, on n'a pas à indiquer l'option -d, mais si le séparateur est un autre caractère, il faut l'indiquer

Exemples

Coupe en fonction du délimiteur -d':' et du premier champ -f 1
cut -d':' -f 1 /etc/passwd
Debian-gdm
hypathie
libvirt-qemu
Coupe en fonction du délimiteur -d':' et des champs 1 ; 3 et 4 -f 1,3,4.
cut -d':' -f 1,3,4 /etc/passwd
Debian-gdm:112:120
hypathie:1000:1000
libvirt-qemu:113:122

À savoir

cut -d'délimiteur' -f n délimiteur et n° champ délimité
cut -d'délimiteur' f n,m,… délimiteur et plusieurs champs

wc

Afficher soit le nombre de mots, soit le nombre de ligne, soit le nombre d'octets

wc [options] [fichier...]

Option -l : Afficher les lignes

Le nombre d'utilisateur du système ?
wc -l /etc/passwd
33 /etc/passwd

Option -w : le nombre de mots

echo "Coucou à tous">> essai-wc
wc -w essai-wc
3 essai-wc

Options -c : nombre d'octet(s)

wc -c essai-wc
15 essai-wc

Synthèse grep

grep [options] regexp [fichier...]

Voir : caractères utilisés dans les expressions régulières étendues

-c afficher le décompte des lignes correspondantes
-i ignorer la case
-E utiliser les regexp étendues
(correspond à egrep)
-o afficher uniquement les parties (non vides) correspondantes des lignes sélectionnées, chaque partie étant affichée sur une ligne séparée.
Deux utilisations:

Soit grep [options] “expression” /chemin/fichier (on applique grep sur un fichier)
Soit grep [options] cmd | regexp (on travaille à partir d'un flux d'entrée avec un filtre (pipe)

Sur un fichier

grep -E "(:[0-9]{4}:){1}" /etc/passwd
hypathie:x:1000:1000:Hypathie,,,:/home/hypathie:/bin/bash

Filtre un flux d'entrée

/sbin/ifconfig | grep -E "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}"
          inet adr:192.168.0.22  Bcast:192.168.0.255  Masque:255.255.255.0
          inet adr:127.0.0.1  Masque:255.0.0.0
/sbin/ifconfig | grep -oE "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}"
127.0.0.1
255.0.0.0
192.168.0.21
192.168.0.255
255.255.255.0
Attention de ne pas oublier -o pour afficher l'occurrence exacte d'un mot au lieu de la ligne entière où figure l'occurrence du mot !
echo "bfer aaa jhgao aaaaaa haug aaaaaaaa" | grep -E "[[:blank:]][a]{3}[[:blank:]]"
bfer aaa jhgao aaaaaa haug aaaaaaaa
echo "bfer aaa jhgao aaaaaa haug aaaaaaaa" | grep -oE "[[:blank:]][a]{3}[[:blank:]]"
 aaa

Synthèse sed

Syntaxe

sed [options] commande [fichier...]

ou

sed [options] -f script [fichier...]

Options

options significations
-e enchaîner plusieurs commandes
-r utiliser les expressions régulières étendues dans un script
-n mode silencieux : permet de ne rien modifier
associée au drapeau p (print) : affichage sur la sortie standard
-f Les commandes sont lues à partir d'un fichier préalablement rédigé.
-i Le fichier est édité sur place.

Afficher ou modifier un fichier

Dans les exemples qui suivent, ne considérons que la présence ou l'absence de l'option i; le reste de la commande est expliqué par la suite.

sed permet d'afficher sur la sortie standard

  • Créer un fichier :
echo "aaaa BBB cCcC # 12345" >> ~/sed1.txt 
  • Afficher le contenu d'un fichier :
sed '' sed1.txt
aaaa BBB cCcC # 12345

sed permet d'afficher sa modification (sans modifier le fichier)

  • remplacer les espaces par des retours à la ligne :
sed 's+ +\n+g' ~/sed1.txt
aaaa
BBB
cCcC
#
12345 
sed '' sed1.txt
aaaa BBB cCcC # 12345

Option -i : modifier le fichier

  • sauvegarder le fichier d'origine “sed1.txt” avec sed -i.bak :
sed -i.bak 's/sed1.txt//' ~/sed1.txt
sed n'a pas afficher sur la sortie standard le contenu du fichier de sauvegarde.
cat sed1.txt.bak
aaaa BBB cCcC # 12345
  • modifier un fichier avec sed -i :
sed -i 's+ +\n+g' ~/sed1.txt
cat sed1.txt
aaaa
BBB
cCcC
#
12345

Plusieurs options à la suite

Les options doivent se suivre dans un ordre précis
  • ajouter des sauts de ligne : sed -i -e 's/$/\\n/' ~/sed1.txt
  • supprimer les lignes vides : sed -i -e '/^$/d' ~/sed1.txt

Adressage

s/motif/substitut/   
	-> si motif = une regex
	-> alors subtitut = une chaîne de caractère
On peut utiliser la syntaxe habituelle, ou la syntaxe étendue avec l'option -r.
man sed
  -r, --regexp-extended
 
              use extended regular expressions in the script.
 //[...]//
REGULAR EXPRESSIONS
       POSIX.2 BREs should be supported, but they aren't completely because of
       performance problems.  The \n sequence in a regular expression  matches
       the newline character, and similarly for \a, \t, and other sequences.
info sed
`-r'
`--regexp-extended'
     Use extended regular expressions rather than basic regular
     expressions.  Extended regexps are those that `egrep' accepts;
     they can be clearer because they usually have less backslashes,
     but are a GNU extension and hence scripts that use them are not
     portable.  *Note Extended regular expressions: Extended regexps.
  • sans -r :

ER simples : ^ ; $ ; . ; * ; \( \) ; [ ; \{ \} ; \

  • avec -r :

ER étendues : | ; ^ ; $ ; . ; * ; + ; ? ; ( ) ; [ ; { } ; \ ; [bracket-expression]

Syntaxe d'adressage avec exemple la commande de suppression

  • d commande de suppression
sed '3,4 d' ~/sed1.txt
aaaa
BBB
12345
pas d'option : rien n'est modifié
d : commande de suppression
3,4 : ligne 3 et 4
  • option -e et répétition le commande d :
sed -e '3d; 4d' ~/sed1.txt
aaaa
BBB
12345
  • adressage / / :
sed '/^B/d' ~/sed1.txt
aaaa
cCcC
#
12345
  • adressage d'une plage / /,/ / :
sed '/^B/,/^1/d' ~/sed1.txt
aaaa

La substitution

Syntaxe

s/modèle/remplacement/[drapeau] fichier

ou

cmd | s/modèle/remplacement/[drapeau]

Les drapeaux

g global : toutes les occurrences
1, 2, etc. un nombre : la nième occurrence
w écrire les modifications effectuées dans un fichier
p afficher la ligne modifiée
e exécution d'une commande

Sans drapeau : première occurrence de chaque ligne

sed 's/C/c/' ~/sed1.txt
aaaa
BBB
cccC
#
12345

Drapeau nombre

sed 's/C/c/2' ~/sed1.txt
aaaa
BBB
cCcc
#
12345

Drapeau w

sed "s/12345/6789/w sed1-modif" ~/sed1.txt
cat ~/sed1.txt
6789

Deux drapeaux

sed 's/C/c/gw modif-sed1.txt' ~/sed1.txt
aaaa
BBB
cccc
#
12345
cccc

Drapeau p

Avec l'option -n pour éviter les doublons, on utilise le drapeau p ;
En effet, on a vu que pour chaque modification, tout le texte est affiché.
drapeau p : il affiche le texte modifié, puis il applique le drapeau, donc affiche ce qui les lignes modifiées.
Grâce -n, on n'affiche pas ce qui est modifié.
-n + drapeau p : on affiche que ce qui a été modifié
sed -n 's/12345/6789/p' ~/sed1.txt
6789

Drapeau e

Utilisation de la sortie d'une commande comme chaîne de remplacement.
sed 's/^#/date/e' ~/sed1.txt
cat ~/sed1.txt
6789
aaaa
BBB
cCcC
mardi 15 juillet 2014, 11:48:27 (UTC+0200)
12345

sed et variables

VAR="coucou"
export VAR
sed 's/^#/echo '$VAR'/e' ~/sed1.txt
aaaa
BBB
cCcC
coucou
12345

Quelques autres commandes de sed

d supprimer
q quitter
p afficher avec -n
i\texte insérer du texte
a\texte ajouter du texte
c\texte remplacer du texte
= afficher

Associer sed et les autres commandes

utilisateurs/hypathie/tutos/accueil.1405674217.txt.gz · Dernière modification: 18/07/2014 11:03 par Hypathie

Pied de page des forums

Propulsé par FluxBB