====== 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