Академический Документы
Профессиональный Документы
Культура Документы
html
SOMMAIRE
L'execution du script peut dépendre de la version de Linux installée. Parfois le script s'execute
dans un "sous shell" (en tapant 'sh') (taper 'exit' pour sortir)
compteur vertical
for i in `seq 1 15`;do echo "$i";done
Numeroter toutes les lignes contenant 'pattern' (affiche 1 numero par ligne)
sed -n '/pattern/=' in.txt
Numeroter toutes les lignes entre 2 patterns (affiche 1 numero par ligne)
sed -n '/pattern1/,/pattern2/{=;d;}' in.txt
Supprimer un champ
echo "data1 line1" | sed 's/.* //'
echo "data1 line1" | sed -n 's/.* //;p'
resultat: line1
Print si longueur de 'colonne 1' >3 "ET" ou "OU" longueur de 'colonne 2' <5
awk 'length($1)>3 && length($2)<5 {print}' in.txt ...........
#ET
awk 'length($1)>3 || length($2)<5 {print}' in.txt ...........
#OU
Longueur de chaque ligne (en nombre de caractères) - voir si la version de Linux supporte : '| m4'
while read line; do echo "len($line)" | m4; done < in.txt
while read line; do echo `expr length "$line"`; done <
in.txt
Formater sur une meme ligne : une ligne paire a droite d'une ligne impaire
cat in.txt | sed "N;s/\(.*\)\n\(.*\)/\1 \2/"
cat in.txt | sed "N;s/\n/ /"
cat in.txt | sed '$ !N; s/\n/ /'
Formater sur une meme ligne : une ligne impaire a droite d'une ligne paire
cat in.txt | sed "N;s/\(.*\)\n\(.*\)/\2 \1/"
Remplace sur chaque ligne du début de la ligne au signe '=' par 'new'
Printer les lignes dont les elements de la colonne 2 ont plus d'une occurrence
Printer de la ligne 1 a 10
sed 10q in.txt
awk 'NR <=10{print}' in.txt
Printer de la ligne 3 a 5
sed '3,5!d' in.txt
sed -n '3,5p' in.txt
awk 'NR >= 3 && NR <= 5' in.txt
head -5 in.txt | tail -3
sed -n '3{:a;N;5!ba;p}' in.txt
@4-pattern
Printer un paragraphe separe par des lignes blanches , contenant pattern1 'et' pattern2
sed -e '/./{H;$!d;}' -e 'x;/pattern1/!d;/pattern2/!d' in.txt
Printer un paragraphe separe par des lignes blanches , contenant pattern1 'ou' pattern2
sed -e '/./{H;$!d;}' -e 'x;/pattern1/b' -e '/pattern2/b' -e d
in.txt
Lire plusieurs patterns - (sans lignes doubles) (ici lignes contenant a 'ou' b)
sed '/[ab]/!d' in.txt
sed '/[ab]/\!d' in.txt
Effectue le remplacement des lignes 4 a 10 et n'ecrit dans 'out.txt' que celles modifiees
sed -e '4,10 s/t/&zorro/gw out.txt' in.txt
Remplacer toutes les occurrences d'un caractère ou d'un pattern pour chaque ligne
var="newpattern" ; awk '{gsub( /oldpattern/, "'"$var"'"
)};1' in.txt
var="newpattern" ; awk -v v="$var" '{gsub( /oldpattern/,
v )}1' in.txt
Remplacer la 2eme occurrence d'un caractère ou d'un pattern pour chaque ligne
awk '{print gensub(/old/, "new", 2) }' in.txt
Supprimer les lignes blanches (l'option '-i' reecrit directement dans le fichier)
sed '/./!d' in.txt
sed -i '/^$/d' in.txt ........... (l'option '-i' est a manier avec
precaution)
@7-Inserer
Inserer une ligne blanche apres chaque ligne sauf apres la ligne 3
sed '3!G' in.txt
Inserer une ligne blanche avant une ligne matchée par un pattern
sed '/tata/{x;p;x}' in.txt
sed -e '/pattern/ i\ ' in.txt
Inserer une ligne blanche après une ligne matchée par un pattern
sed '/tata/G' in.txt
sed -e '/pattern/ a\ ' in.txt
Inserer une ligne blanche avant et apres une ligne matchee par un pattern
sed '/tata/{x;p;x;G}' in.txt
@8-divers
Printer un fichier
cat in.txt
sed '' in.txt
sed ':' in.txt
Trier un fichier
dans un ordre numerique (-n); avec separateur (-t);
colonne (-k); et place du caractere (.)
cat in.txt | sort -n -t" " -k2.4
dans un ordre decroissant (-r) et en retirant les doubles
(-u) :
cat in.txt | sort -r -u
Copier un fichier
cp old_file new_file
sed 'w new_file' old_file
Si 1 ligne commence par un signe egale '=' , l'ajouter a la ligne precedente et remplacer le signe
egale '=' par un espace
sed -e :a -e '$!N;s/\n=/ /;ta' -e 'P;D' in.txt
Encadre le premier nombre de la ligne avec des ** , ne printer que ces lignes
sed -n "s/\([0-9][0-9]*\)/**\1**/p" in.txt
'set' decoupe 1 variable en parametres positionnels dans un sous shell (taper: sh)
string="a b:c def:g"; IFS=':'; set $string; echo "$1"
apostrophe et guillemet
echo -n "your name is: "; read name ........... #taper: toto
echo 'hi $name' ........... #resultat : hi name
nouveau separateur
IFS=",";echo "moi et moi, lui, les autres" | (read x y;echo
$x) ........... (->moi et moi)
Concatenation
(utiliser un sous shell en tapant: sh + return)
var=debut;echo ${var}ant ........... ---->debutant
Commande 'eval'
(utiliser un sous shell en tapant: sh + return)
message="date d'aujourd'hui?";set $message;echo $#
.......#resultat: 2
message="date d'aujourd'hui?";set $message;echo $1
.......#resultat: date
message="date d'aujourd'hui?";set $message;eval $1
.......#resultat: dim 20 jan..