Pages

dimanche 24 novembre 2013

Unix patterns



En vrac.

Supprimer les disques d'un vg d'un coup d'un seul ...
# myvg=vg01;mydsk=`lsvg -p $myvg |grep hdisk |awk '{ print $1}'`;reducevg -df $myvg $mydsk


renommer les S10rc.xxx en s10rc.xxx : ls S* | grep -v sshd | while read a ;do mv $a $(echo $a |sed  "s/^S/s/") ;done

find . -name ’*.a’ | xargs ls -l + rapide que find . -name ’*.a’ -exec ls -l \ ;

find /d1 /d2 /d3 -name toto.c #cherche dans les trois rep. Le fichier toto.c

find . | xargs grep toto # cherche une occurrence dans x fichiers

find . -ls | sort -nr -k7 | head -20

(logname ; date ; printf "%s\n" "$0 $* ") | xargs >> log

ls $1 | xargs -I mv $1/ $2/


find . -name "user*" -ctime +1 # + vieux que 1 jour
 ctime 1 # vieux de 1 jour
 ctime -1 # d’aujourd’hui


vi -> :1,$s/notesds/notesdsr/g

kill -9 `ps -fu borland | grep /opt/appserver/cvshelper |nawk ‘ORS=” “ ;print $2’`

Copier une source vers une target avec tar et ssh.
 tar cvf - . | ssh root@server1 'cd /opt/cobol;tar xf - '

renommer des fichiers un un bloc.
ls -1 pattern | awk ’print "mv "$1" "$1".new"’ | sh
avec SED ou dans VI, pour changer p.ex des champs qui n’ont pas de guillemets en en ajoutant,


:%s/^I\([^"].*[^"]\)^I/^I"\1"^I/g
les ^I sont à faire avec la touche tab, le copier/coller ne fonctionne pas.
ensuite l’instruction entre parenthèses génère la var 1 contenant un guillemet + n’importe quel caractère + un guillemet, et va le remplacer par la même valeur (1) mais entouré de guillemets …


Planifier une commande avec "at"
echo "shutdown -Fr now" | at -t MMDDhhmm

Lire une man page  :
#nroff -man smbd.8 | more

RSYNC

 

rsync -avn —exclude ’oradata/’ /data/mnt4/ /MIGRATION/data/mnt4/
rsync -av --rsh=/usr/bin/rsh --rsync-path=/usr/local/bin/rsync /home/ server41:/home/

Attention le n est pour simulation ( ne fait rien)
plus la page de man



AWK Manipulations
Afficher les motifs 2,3,4 jusqu'à NF en fonction d'un pattern "monmotif" trouvé

cat  troublenim.monmotif |awk  '$3 ~ "monmotif"  { for (x=3; x<=NF; x++) { printf "%s%c", $x, OFS } print "" }' |sort |uniq

Ajouter le contenu d'un fichier d'un serveur vers un autre serveur
cat /etc/passwd |grep dbadev1 |ssh barolo13 "cat - >> /etc/passwd "


Virer des fichiers impossibles Tu as créé un fichier commençant par un - … mauvaise idée !! Pour le virer tu peux faire rm ./-ton_fichier ou rm — -ton_fichier ou encore ls -i (récupérer l’i-node) et le virer avec find . -inode ton_inode -exec rm \ ;



Passer un argument se trouvant SOUS un autre A COTE de l'autre.
exemple : cat test
toto
tata
titi
tutu
doit devenir
toto tata
titi tutu


cat test|awk 'BEGIN { i=0 } i==0 { VAR=$0 } i==1 { print VAR, $0; i=-1 } { i++ }'

Insérer une ligne vide après un pattern p.ex flag=


cat /etc/security/passwd |awk "/flags/ {print; print "\n"}; !/flags/ {print "$*"}"|uniq


SED 

Supprimer une (ou plusieurs) ligne(s) d'un fichier


Syntaxe


sed '{[/]||[/]}d'
sed '{[/][,][/]d'
- /.../ = délimiteurs
- n = le numéro de ligne
- chaîne = la chaîne contenue dans la ligne
- regex = l'expression régulière correspondant au motif recherché
- adr = l'adresse d'une ligne (numéro ou motif)
- d = delete (effacer)


Exemples


Suppression de la 3ème ligne
sed '3d' mon_fichier.txt


Suppression de la ligne contenant la chaîne "awk"
sed '/awk/d' mon_fichier.txt


Suppression de la dernière ligne
sed '$d' mon_fichier.txt


Suppression de toutes les lignes vides
sed '/^$/d' mon_fichier.txt
sed '/./!d' mon_fichier.txt


Suppression de la ligne "matchée" par une expression régulière
(ici on élimine celle contenant des caractères numérique (au moins 1 chiffre) situés en fin de ligne)
sed '/[0-9/][0-9]*$/d' mon_fichier.txt


Suppression de l'intervalle compris entre les lignes 7 et 9
sed '7,9d' mon_fichier.txt
La même chose mais en remplaçant l'adresse par des "motifs"
sed '/-Début/,/-Fin/d' mon_fichier.txt
Note


Les exemples précédents ne font que modifier l'affichage du fichier (sortie standard 1 = l'écran).
Pour des modifications permanentes, pour les anciennes versions (< 4) utiliser un fichier temporaire, pour GNU
sed utiliser le paramètre "-i[suffixe]" (--in-place[=suffixe]), comme dans l'exemple suivant :
sed -i".bak" '3d' mon_fichier.txt
qui aura pour effet, de ne produire aucun affichage sur la sortie standard, de modifier le fichier original "mon_fichier.txt" en supprimant
la 3ème ligne et de créer un fichier de sauvegarde nommé "mon_fichier.txt.bak".



ajouter à la fin d'une ligne un pattern, cela uniquement sur une ou plusieurs lignes spécifiques :


 cat /etc/security/login.cfg | sed "/^        shells/s/$/,\/bin\/sftponly/"


ou pour supprimer des chaines de car. On peut exécuter plusieurs requêtes sed en une seule commande.


sed '/latency/d;/usecs/d;/exiting/d;/total/d' $INFILE


Modifier une occurrence par une autre.
# cat vh0b |grep -v N
hdisk202
hdisk203
hdisk266
hdisk267
hdisk268


# cat vh0b |grep -v N |sed "s/^\(.*\)$/\1 n\1/"
hdisk202 nhdisk202
hdisk203 nhdisk203
hdisk266 nhdisk266
hdisk267 nhdisk267
hdisk268 nhdisk268


Ajouter le motif :/usr/local/man a la ligne commençant par MANPATH  (le & indique qu'il faut ajouter le motif)
 cat /etc/environment |sed "/^MANPATH/s/.*/&:\/usr\/local\/man/"


Ajouter un "dièse" au début de chaque ligne d'un fichier.


cat wcoll |sed "s/.*/#&/"  En remplaçant par &# on met le dièse à la fin


Et pour ajouter un motif devant une ligne ou une sélection de ligne, mettre le motif /ma recherche/ avant le s/



Aucun commentaire:

Enregistrer un commentaire