Bash: lire des lignes dans un fichier et éviter les lignes avec #
J'ai essayé ceci:
file="myfile"
while read -r line
do
[[ $line = \#* ]] && continue
"address=$line7.0.0.1"
done < "$file"
Ce code n'évite pas les lignes qui commencent avec des commentaires. Même si je n'ai pas de commentaires, dnsmasq
dit qu'il y a des erreurs.
Sa va être un dnsmasq
fichier conf, et il va lire et insérer les noms de domaine comme: address=\mydomain.com\127.0.0.1
.
EDIT:1
Fichier d'entrée:
domain1.com
domain2.com
domain3.com
#domain4.com
domain5.com
Sortie doit être:
address=/domain1.com/127.0.0.1
address=/domain2.com/127.0.0.1
address=/domain3.com/127.0.0.1
address=/domain5.com/127.0.0.1
Je vais laisser tomber le script dans /etc/dnsmasq.d/ répertoire de sorte que dnsmaq.conf peut le traiter quand dnsmasq
est commencé.
source d'informationauteur nixnotwin
Vous devez vous connecter pour publier un commentaire.
Il est plus sûr d'utiliser
[[ "$line" = "\#*" ]]
Btw,
address="\\${line}\\127.0.0.1"
UPD:
Si je vous comprends bien vous avez besoin de changer tous les décommenté les domaines de
address=\domain\127.0.0.1
. Il pourrait être fait rapidement et facilementsed
il n'est pas nécessaire dans bash-programme.Si vous avez besoin de supprimer des lignes commentées, sed peut le faire aussi avec
/matched_line/d
UPD2: si vous voulez faire ce genre de choses à l'intérieur du script bash, voici votre code de modification:
Et elle est sortie:
À sauter des lignes de départ avec
#
:Modifier le
grep
de commande en tant que de besoin, par exemple, d'ignorer les lignes commençant avec un espace et un#
caractère.Seul à travailler pour moi a été:
Cela prend de la chaîne, obtient la sous-chaîne à l'offset 0, longueur 1:
et vérifie si elle est égale à
#
et continue en boucle si donc
http://www.tldp.org/LDP/abs/html/string-manipulation.html
Lignes de commentaire peut-et souvent ne commencent avec des espaces. Voici un bash natif regex solution qui gère tout en les précédant espaces;
Cela peut également être réalisé avec 1
sed
commande:Cela va modifier le fichier en place (création d'une copie de sauvegarde d'abord), en supprimant toutes les lignes commençant par un
#
.Vous pouvez filtrer avec
awk
:Peut-être vous pouvez essayer
Vérifier la
~
dans l'opérande!Il dispose de 3 pièces. Veuillez lire chacun de comprendre clairement
awk -F'#' '{print $1}' t.txt
awk 'NF > 0'
awk '{print "address=/"$0"/127.0.0.1"}'
Donc Total Script,
De sortie :