Outils pour utilisateurs

Outils du site


linux:shell:traitement_texte

Linux

Manipulation sur les chaînes de caractères

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 '^(#|$)'  <FICHIER>
$ grep -E -v '^(#|$)'  <FICHIER>

Avec Sed :

$ sed -e '/^[ ]*#/d' -e '/^[ ]*;/d' -e '/^$/d' <FICHIER>

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

linux/shell/traitement_texte.txt · Dernière modification : de zandor