Blogotux

Trucs, astuces pour linux mais c'est d'abord mon bloc-notes, donc sans grandes prétentions

Mes liens avec Shaarli

inverser les lignes d'un fichier

03/03/2020 à 20:28:21 - Aucun commentaire

en inserant des lignes en début avec sed

version 2
le script balaie les lignes du fichier toto.txt, les recopie au début de toto2.txt, qui est renommé ensuite .
A la fin, l'ordre des lignes est donc inversé. Un backup préalable est écrit

#!/bin/bash
file="toto.txt"
cp "$file" "$file".bk
echo "">toto2.txt
while IFS= read -r line
do
sed -i 1i"$line" toto2.txt
done <"$file"
mv toto2.txt "$file"

version 1
le script balaie les lignes du fichier1, et les recopie au début de fichier2.
A la fin, l'ordre des lignes est donc inversé.
nota: la commande sed -i 1i"$line" fichier2.txt insère à la 1° ligne. (2i pour la 2° ligne).

#!/bin/bash
file="fichier1.txt"
while IFS= read -r line
do
sed -i 1i"$line" fichier2.txt
done <"$file"

Dans les catégories : script, sed

espaces avec sed

06/11/2019 à 17:40:11 - Aucun commentaire

comment les échapper

un espace dans une variable gêne une commande avec sed dans un script ( qui insère une ligne en début de fichier)
l'espace entre année Y et heure H fait échouer la commande sed. De même, l'espace entre la date et var2 est un souci.

var1=$(date +"%d-%m-%Y %H:%M")" "$var2
sed -i 1i$var1 fichier.txt

solution : mettre $var1 entre guillemets . Les espaces dans la variable ne seront plus problématiques

sed -i 1i"$var1" fichier.txt

Dans les catégories : bash, script

Tester des machines distantes par ping

28/09/2012 à 12:28:24 - Aucun commentaire

Script très simple, mais juste ce qu'il faut pour savoir si une machine est connectée

Je me suis très largement inspiré de cette page
J'ai juste ajouté un second tableau, qui contient un libellé pour chaque adresse IP, qui sera affiché à côté de celle-ci, dans le compte-rendu
Il suffit d'ajouter tab[3], etc pour autant d'adresses utiles

#!/bin/bash
tab[0]=127.0.001
tab[1]=82.17.11.14
tab[2]= 82.127.25.17

tabs[0]=local
tabs[1]=site1
tabs[2]=site2

i=1
while (( $i < ${#tab[*]} )); do
ping -c 1 ${tab[$i]} -q
tabR[$i]=${?};
i=$((i+1));
done

clear
i=1
while (( $i < ${#tab[*]} )); do
if [ ${tabR[$i]} -eq 0 ];
then echo " ${tab[$i]} : ${tabs[$i]} OK. "
else echo " ${tab[$i]} : ${tabs[$i]} ne répond pas."
fi
i=$((i+1));
done

Dans les catégories : reseau, script