GNU/Linux >> Tutoriels Linux >  >> Linux

Utilisation d'une référence à une variable de chaîne Bash dans Sed ?

Je suis un novice relatif à Linux. Supposons que j'ai un fichier texte a.txt qui contient le texte suivant :

A
B
C

Maintenant, si je veux changer le texte de la ligne 2 (qui contient B ), je peux utiliser le sed suivant commande :

sed -i '2s/^.*$/X/' a.txt

pour changer le B à X , par exemple.

Mais supposons maintenant que je veuille écrire un sed commande qui change le texte de la ligne 2 en quelque chose qui inclut une variable de chaîne bash. Je veux changer le texte de la ligne 2 en fname="myaddress" , où les guillemets sont inclus explicitement, et où myaddress est une variable de chaîne bash (défini ailleurs). Pour essayer de faire cela, j'ai créé un script shell bash appelé mytest.sh et contenant les éléments suivants :

#!/bin/bash

myaddress="/home/"
echo fname="$myaddress"

head a.txt
sed -i '2s/^.*$/fname="$myaddress"/' a.txt
head a.txt

Maintenant, echo fname="$myaddress" imprime fname="/home/" , qui est le texte que je veux être sur la ligne 2 de a.txt . Cependant, sed imprime à la place fname="$myaddress" à la ligne 2 de a.txt , probablement parce qu'il se trouve à l'intérieur des apostrophes environnantes. En d'autres termes, la sortie du script shell bash ci-dessus est :

fname="/home/"
A
B
C

A
fname="$myaddress"
C

Ma question est, comment puis-je obtenir sed pour imprimer réellement la valeur stocké dans myaddress et référencé par $myaddress ?

Réponse acceptée :

Il y a deux problèmes :Premièrement, comme Kevin l'a déjà noté, les variables du shell doivent être placées entre guillemets doubles si elles doivent être développées par le shell. Deuxièmement, votre chaîne de remplacement contient un / , vous ne pouvez donc pas utiliser / en même temps qu'un délimiteur pour sed . Si vous savez qu'un caractère, dites , , n'apparaîtra certainement pas dans la chaîne de remplacement, vous pouvez utiliser ce caractère comme sed délimiteur, vous obtenez donc

sed -i '2s,^.*$,fname="'"$myaddress"'",' a.txt

Linux
  1. Script bash (I)

  2. Envelopper le premier caractère d'une chaîne à l'aide de Sed ?

  3. Utiliser Sed pour ajouter un caractère dans la nième position de la chaîne correspondante ?

  4. Affecter seulement une partie d'une chaîne à une variable dans Bash ?

  5. Comment écrire une chaîne de plusieurs lignes en utilisant Bash avec des variables ?

Variable d'exportation bash

Chaînes de concaténation bash

Remplacement de chaîne dans Bash

Script Bash - Manipulation de chaînes

Bash Beginner Series #4 :Utiliser des tableaux dans Bash

Utilisation de la commande Bash printf pour imprimer des sorties formatées