logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 28-11-2018 12:37:57

LaFouine
Membre
Distrib. : Debian testing
Noyau : 4.19.0-4-amd64
(G)UI : Xfce
Inscription : 10-04-2017

[BASH] remplacer les espace par des saut de ligne ?

Bonjours,
je ne parviens pas a remplacer les espaces par un saut de ligne.

le contenu du fichier


[1543397023] unbound[820:0] info: subnet operate: query dom1.download.comodo.com. A IN
[1543397023] unbound[820:0] info: subnet operate: query dom2.download.comodo.com. A IN
[1543397023] unbound[820:0] info: subnet operate: query dom3.download.comodo.com. A IN
 


Avec un filtre pour obtenir les domaines ( il y a peut être plus simple ?).

 echo `cat /var/log/unbound.log | grep "operate: query" | cut -d" " -f7- |cut -d" " -f1 | sed 's/.$//'` > $FichierTemporaire



j'obtien tout sure une ligne  comme ceci:

dom1.download.comodo.com  dom2.download.comodo.com  dom3.download.comodo.com


ce que je voudrai comme résulta :


local-zone: dom1.download.comodo.com  redirect
local-data: "dom1.download.comodo.com A 127.0.0.1"
 



je pensai donc faire une boucle sur le fichier temporaire, mai vu que c est sur une ligne ?
( je passe par un fichier car les données peuves être conséquente )

merci d'avance


Debian testing, nvidia 980 gtx sli, cm asurock 16 gb ram cpu i7 4,2 ghz

Hors ligne

#2 28-11-2018 14:02:55

kao
Modérateur
Distrib. : Testing
Noyau : Linux 4.quelquechose
(G)UI : Gnome 3
Inscription : 27-09-2012
Site Web

Re : [BASH] remplacer les espace par des saut de ligne ?

Salut,
\n pour insérer un retour à la ligne exemple:

echo "query dom1.download.comodo.com" | sed 's/query /query\n/g'


\t pour une tabulation
A toi de voir où tu veux le placer et si cela nécessite une boucle

Hors ligne

#3 28-11-2018 14:35:26

MicP
Membre
Inscription : 29-02-2016

Re : [BASH] remplacer les espace par des saut de ligne ?

Bonjour

le contenu du fichier

[1543397023] unbound[820:0] info: subnet operate: query dom1.download.comodo.com. A IN
[1543397023] unbound[820:0] info: subnet operate: query dom2.download.comodo.com. A IN
[1543397023] unbound[820:0] info: subnet operate: query dom3.download.comodo.com. A IN
 


ce que je voudrai comme résulta :

local-zone: dom1.download.comodo.com  redirect
local-data: "dom1.download.comodo.com A 127.0.0.1"


Je ne vois pas du tout comment extraire des 3 lignes citées en exemple
les mots et suites de mots suivantes :

local-zone:
local-data:
redirect
 

ni l'adresse IP 127.0.0.1

=======
Mais pour raccourcir la ligne de commandes citée :

 echo `cat /var/log/unbound.log | grep "operate: query" | cut -d" " -f7- |cut -d" " -f1 | sed 's/.$//'` > $FichierTemporaire

tout en y ajoutant le caractère de fin de ligne demandé,
je propose d'utiliser awk :

awk '/operate: query/ {print $7}' /var/log/unbound.log > $FichierTemporaire


Dernière modification par MicP (28-11-2018 14:58:35)

Hors ligne

#4 28-11-2018 14:36:59

LaFouine
Membre
Distrib. : Debian testing
Noyau : 4.19.0-4-amd64
(G)UI : Xfce
Inscription : 10-04-2017

Re : [BASH] remplacer les espace par des saut de ligne ?

Merci pour ta réponse
comment je sélectionne l'espace a la place de  query ?

Debian testing, nvidia 980 gtx sli, cm asurock 16 gb ram cpu i7 4,2 ghz

Hors ligne

#5 28-11-2018 14:51:55

MicP
Membre
Inscription : 29-02-2016

Re : [BASH] remplacer les espace par des saut de ligne ?

…comment je sélectionne l'espace a la place de  query ?

Désolé, mais je ne comprends pas très bien ce que tu voudrais faire avec la sélection d'un caractère espace,
ni de quel caractère espace il s'agit (il y a 8 caractères espace dans chacune des 3 lignes citées).

Dernière modification par MicP (28-11-2018 14:58:47)

Hors ligne

#6 28-11-2018 17:04:20

empanada
Membre
Distrib. : Debian 11 (Bullseye)
Noyau : 5.10.0-13-amd64
(G)UI : LXDE
Inscription : 19-09-2018

Re : [BASH] remplacer les espace par des saut de ligne ?

Peut-être tu veux quelque chose comme ça?

sed -En 's/.*operate: query (.*). A IN/local-zone: \1 redirect\nlocal-data: "\1 A 127.0.0.1"/p' /var/log/unbound.log > $FichierTemporaire


 cat > $FichierTemporaire


local-zone: dom1.download.comodo.com redirect
local-data: "dom1.download.comodo.com A 127.0.0.1"
local-zone: dom2.download.comodo.com redirect
local-data: "dom2.download.comodo.com A 127.0.0.1"
local-zone: dom3.download.comodo.com redirect
local-data: "dom3.download.comodo.com A 127.0.0.1"

Dernière modification par empanada (28-11-2018 19:52:51)


"blues are the roots and the other musics are the fruits" . Willie Dixon

Hors ligne

#7 28-11-2018 18:18:01

otyugh
CA Debian-Facile
Lieu : Quimperlé/Arzano
Distrib. : Debian Stable
Inscription : 20-09-2016
Site Web

Re : [BASH] remplacer les espace par des saut de ligne ?

Par rapport juste à la question dans le titre, il suffit de | sed "s/ /\n/"

virtue_signaling.pngpalestine.png
~1821942.svg

Hors ligne

#8 28-11-2018 19:43:50

MicP
Membre
Inscription : 29-02-2016

Re : [BASH] remplacer les espace par des saut de ligne ?

Ou alors, c'est peut-être :

awk '/operate: query/ {print "local-zone: "$7"  redirect\nlocal-data: \""$7" A 127.0.0.1\""}' /var/log/unbound.log > $FichierTemporaire


ce qui donnerait,
dans le contenu du fichier  $FichierTemporaire

local-zone: dom1.download.comodo.com.  redirect
local-data: "dom1.download.comodo.com. A 127.0.0.1"
local-zone: dom2.download.comodo.com.  redirect
local-data: "dom2.download.comodo.com. A 127.0.0.1"
local-zone: dom3.download.comodo.com.  redirect
local-data: "dom3.download.comodo.com. A 127.0.0.1"
 


Mais c'est vrai qu'on peut faire tout aussi bien,
comme le proposait empanada
en utilisant simplement sed

EDIT : ajout du nom du fichier source /var/log/unbound.log
oublié dans la ligne de commande

Dernière modification par MicP (29-11-2018 13:42:03)

Hors ligne

#9 28-11-2018 19:55:51

empanada
Membre
Distrib. : Debian 11 (Bullseye)
Noyau : 5.10.0-13-amd64
(G)UI : LXDE
Inscription : 19-09-2018

Re : [BASH] remplacer les espace par des saut de ligne ?

MicP a écrit :

Ou alors, c'est peut-être :

awk '/operate: query/ {print "local-zone: "$7"  redirect\nlocal-data: \""$7" A 127.0.0.1\""}' > $FichierTemporaire


J'aime bien, c'est plus propre et élégant qu'avec sed.yes.gif
Salut


"blues are the roots and the other musics are the fruits" . Willie Dixon

Hors ligne

#10 28-11-2018 21:22:09

MicP
Membre
Inscription : 29-02-2016

Re : [BASH] remplacer les espace par des saut de ligne ?

La commande sed prendra peut-être moins de ressources qu'awk,
et ça pourrait avoir une importance si cette ligne de commande
est un peu trop souvent appelée par un script.

Dans ma ligne de commandes,
j'avais oublié d'enlever du retour de commande le point final du FQDN
et je n'ai pas tenu compte des deux derniers champs de la ligne (A IN) dans la recherche.

J'espère que LaFouine trouvera dans ce fil de discussion tout ce qu'il lui faut,
ce n'est pas toujours facile de bien formuler une demande d'aide
quand on ne sait pas encore tout ce qu'il est possible de faire avec certaines commandes.

Dernière modification par MicP (28-11-2018 22:22:08)

Hors ligne

#11 29-11-2018 12:44:52

LaFouine
Membre
Distrib. : Debian testing
Noyau : 4.19.0-4-amd64
(G)UI : Xfce
Inscription : 10-04-2017

Re : [BASH] remplacer les espace par des saut de ligne ?

merci tout pour vos réponse

empanada a vu juste , et très propre. yes.gif
MicP awk semble planter ou ne fait rien, avec htop awk ne donne pas signe de vie.

reste plus qu'a mettre une liste blanche et sa roule , mai quelque chose me dit que je vais galérer avec les "zen.gif

Debian testing, nvidia 980 gtx sli, cm asurock 16 gb ram cpu i7 4,2 ghz

Hors ligne

#12 29-11-2018 13:39:29

MicP
Membre
Inscription : 29-02-2016

Re : [BASH] remplacer les espace par des saut de ligne ?

Oui, désolé,
j'ai ajouté dans mon précédent message le nom du fichier source : /var/log/unbound.log
que j'avais oublié de copier/coller dans la ligne de commande sur le forum

Ce qui donne :

awk '/operate: query/ {print "local-zone: "$7"  redirect\nlocal-data: \""$7" A 127.0.0.1\""}' /var/log/unbound.log > $FichierTemporaire

Dernière modification par MicP (29-11-2018 13:40:45)

Hors ligne

#13 29-11-2018 14:23:39

LaFouine
Membre
Distrib. : Debian testing
Noyau : 4.19.0-4-amd64
(G)UI : Xfce
Inscription : 10-04-2017

Re : [BASH] remplacer les espace par des saut de ligne ?

voila ce que ça donne c est pas tout a fait fini , comme je maitrise pas le langage j'imagine qu'il y a plus simple.


#!/bin/bash
FichierTemporaire="./tmpunbound.txt"
FichierFinal="/etc/unbound/unbound.conf.d/zoneinterdite.conf"
ListeBlanche="./liste_blanche.txt"
#ajouter un test pour savoir si le fichier existe
echo "supprimer ce fichier revien a une mise a zero des valeur pour l'interdiction"
rm -i $FichierFinal
#ajouter un test pour savoir si le fichier existe
#si le scripte a planter sou si l'utilisateur a voulu le conserver
rm -i $FichierTemporaire
#echo `cat /var/log/unbound.log | grep "validator operate: query" |cut -d" " -f7- |cut -d" " -f1 | sed 's/.$//'` > $FichierTemporaire

sed -En 's/.*operate: query (.*). A IN/local-zone: \1 redirect\nlocal-data: "\1 A 127.0.0.1"/p' /var/log/unbound.log | sort | uniq > $FichierTemporaire
while read line
do
ResZ=`echo $line |cut -d"\"" -f2- |cut -d" " -f1 `
ResL=`echo $line |cut -d" " -f2- |cut -d" " -f1 `
Found="false"

if [ -n $ResZ ] ; then
        if [ "local-zone:" != $ResZ ] ;then
                ResZGrep=`grep  "$ResZ" $ListeBlanche -c`
                if [ $ResZGrep == "0" ] ;then
                        Found="false"
                else
                        Found="true"
                fi
        fi
        if [ -n $ResL ] ; then
                if [ $Found == "false" ] ;then
                        ResLGrep=`grep  "$ResL" $ListeBlanche -c`
                        if [ $ResLGrep == "0" ] ;then
                                Found="false"
                        echo "$line" >> $FichierFinal
                        else
                                Found="true"
                                echo "trouver " $ResLGrep
                        fi
                else
                        echo "trouver " $ResLGrep
                fi
        fi
else
        echo "Erreur la variable ResZ est vide:"$line
fi
done < $FichierTemporaire
#ajouter un test pour savoir si le fichier existe
echo "fichier cree par  le script a supprimer?"
rm -i $FichierTemporaire

chmod 0744 $FichierFinal
chown root:root $FichierFinal
ls -la $FichierFinal
nano $FichierFinal
 


Debian testing, nvidia 980 gtx sli, cm asurock 16 gb ram cpu i7 4,2 ghz

Hors ligne

Pied de page des forums