Disons que j'ai une variable shell $string
qui contient du texte avec plusieurs sauts de ligne, par exemple:
string="this
is
a test"
Je voudrais convertir cette chaîne en une nouvelle chaîne new_string
où tous les sauts de ligne sont convertis en espaces:
new_string="this is a test"
J'ai essayé:
print $string | sed 's/\n/ /g'
mais ça n'a pas marché
Je me demande également s'il existe un moyen de le faire en utilisant perl -0777 's/\n/ /g'
ou peut-être la commande tr
?
Réponses:
Si vous souhaitez uniquement supprimer les nouvelles lignes de la chaîne, vous n'avez pas besoin de les utiliser
sed
. Vous pouvez utiliser simplementcomme d'autres l'ont souligné.
Mais si vous souhaitez convertir de nouvelles lignes en espaces sur un fichier en utilisant
sed
, vous pouvez utiliser:ou même
awk
:la source
sponge
est un utilitaire utile pour écraser un fichier d'entrée. Il fait partie du packagemoreutils
... par exemple.awk '$1=$1' ORS=' ' file |sponge file
moreutils
...Vous pouvez essayer d'utiliser à la
tr
place:la source
Encore une autre option serait d'utiliser
xargs
(qui, en plus, serre plusieurs espaces blancs):la source
Echo ignore les espaces blancs, donc cela devrait fonctionner:
la source
Si vous avez déjà la chaîne comme une variable bash, comme votre exemple montre, il est inutile et le gaspillage des ressources (et plus besoin de taper) pour appeler
sed
,awk
,printf
, etc ... Vous pouvez simplement utiliser l' expansion variable bash :Vous n'avez même pas besoin de le réaffecter. Vous pouvez utiliser l'extension telle
$string
quelle et laisser inchangée.la source
Vous pouvez également essayer cette commande awk,
Exemple:
la source
Cela convertit toute séquence d'un ou plusieurs
\n
caractères ewline apparaissant dans la variable shell$string
en un seul<space>
.la source
Vous pouvez utiliser la simple commande sed
la source