====== Linux ====== ===== Manipulation sur les chaînes de caractères ===== => commandes de base : [[https://linuxtricks.fr/wiki/commandes-de-base]] ==== Longueur d'une chaîne de caractère ==== $ CHAINE="hello world!" $ LONGUEUR=${#CHAINE} $ echo $LONGUEUR 12 \\ ==== Vérifier qu'une chaîne est vide ==== chaine=" " if [[ -z "${chaine// /}" ]]; then echo "La chaîne est vide ou ne contient que des espaces." fi \\ ==== Récupérer la valeur situee apres une declaration de variable ==== ex : un fichier contenant la ligne "VAR1=10" LIGNEVAR=$( grep 'VAR1' "fichier.txt" ) VALEUR="${LIGNEVAR#*=}" # VALEUR=10 \\ ==== Récupérer une partie d'une chaîne ==== Les n derniers caractères d'une chaîne chaine="mois de novembre" resultat="${chaine:-3}" # resultat="bre" # ou resultat=$( echo -n "${chaine}" | tail -c 3 ) \\ ==== Supprimer un caractere recurrent ==== Supprimer le caractère ':' chaine="2359:09/28:dejeuner:lundi:" resultat="${chaine//\)/}" # ou resultat=$(echo "${chaine}" | tr -d ':') echo "$resultat" # Affiche : 235909/28dejeunerlundi resultat="${chaine%:"}" # supprime seulement le ':' en fin de ligne echo "$resultat" # Affiche : 2359:09/28:dejeuner:lundi ==== Afficher un fichier sans les lignes de commentaires ==== Avec Grep : $ egrep -v '^(#|$)' $ grep -E -v '^(#|$)' Avec Sed : $ sed -e '/^[ ]*#/d' -e '/^[ ]*;/d' -e '/^$/d' ==== Rechercher et afficher les fichiers contenant un motif donné ==== $ find . -type f -exec grep -il 'chaine' {} ; ==== Afficher les fichiers contenant 'MOTIF1' mais qui ne contiennent pas 'MOTIF2' ==== for FIC in `find . -name 'txt' -type f -exec grep -il 'motif_voulu' {} \;` do grep -L 'motif_non_voulu' $FIC done ==== Afficher les lignes (+ num) d'un fichier contenant une expression particulière ==== Lecture ligne par ligne d'un fichier NBL=0 while read LIGNE do NBL=$(( $NBL + 1 )) echo $LIGNE | grep 'boe120_audit' > /dev/null if [ $? -eq 0 ] then echo "$NBL > $LIGNE" fi done < 20120524_PROD_backup_mysqlbo.sql \\ ==== SED : Suppression de certaines lignes d'un fichier ==== 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 les numéros de ligne par des "motifs" sed '/-Début/,/-Fin/d' mon_fichier.txt