S'il vous plaît aider avec des espaces lorsque le script ajoute une ligne après le modèle recherché
$ cat test.txt
test server:1
prod server 1
$ cat ./check.sh
#!/bin/bash
#
search=" test server:1"
add=" test server:1000"
echo "starting"
sed -e "/${search}/a${add}" ./test.txt
$ ./check.sh
starting
test server:1
test server:1000
prod server 1
espaces avant: serveur de test: 1000 sont perdus. Comment puis-je réparer cela?
Vous devez quitter l'espace, sinon sed
l'ignorera car /pattern/atext
et /pattern/a text
et /pattern/a text
sont interprétés de la même manière.
Utilisez ceci:
sed -e "/${search}/a${add// /\\ }" ./test.txt
Ce que vous voyez est une différence subtile entre la commande étendue GNU
a text
Ajouter du texte après une ligne. Il s’agit d’une extension GNU de la commande standard - voir ci-dessous pour plus de détails.
dans lequel le manuel note que
Les espaces après la commande a sont ignorés.
et la forme originale et plus portable
a\ text
qui ne supprime pas les grands espaces. Il existe plusieurs manières d’obtenir ce dernier comportement dans un "one-liner", par exemple.
$ sed "/${search}/a\\${add}" ./test.txt
test server:1
test server:1000
prod server 1
(notez que le \
doit être échappé entre guillemets) ou
$ sed "/${search}/a"'\'"${add}" ./test.txt
test server:1
test server:1000
prod server 1
ou
$ sed -e "/${search}/a\\" -e "${add}" ./test.txt
test server:1
test server:1000
prod server 1
(notez cependant que le dernier repose sur une autre extension GNU, -e
).