GNU/Linux >> Znalost Linux >  >> Linux

Použití odkazu na proměnnou bashového řetězce v Sed?

Jsem relativní linuxový nováček. Předpokládejme, že mám textový soubor a.txt který obsahuje následující text:

A
B
C

Nyní, pokud chci změnit text na řádku 2 (který obsahuje B ), mohu použít následující sed příkaz:

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

pro změnu B do X , například.

Ale teď předpokládejme, že chci napsat sed příkaz, který změní text na řádku 2 na něco, co obsahuje bash string proměnná. Chci změnit text na řádku 2 na fname="myaddress" , kde jsou uvozovky uvedeny explicitně a kde myaddress je proměnná řetězce bash (definováno někde jinde). Abych to zkusil, vytvořil jsem bash shell skript nazvaný mytest.sh a obsahující následující:

#!/bin/bash

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

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

Nyní echo fname="$myaddress" vytiskne fname="/home/" , což je text, který chci být na řádku 2 a.txt . Nicméně sed místo toho vypíše fname="$myaddress" na řádek 2 souboru a.txt , pravděpodobně proto, že je uvnitř okolních apostrofů. Jinými slovy, výstup výše uvedeného bash shell skriptu je:

fname="/home/"
A
B
C

A
fname="$myaddress"
C

Moje otázka zní, jak mohu získat sed skutečně vytisknout hodnotu uloženy v myaddress a odkazováno pomocí $myaddress ?

Přijatá odpověď:

Existují dva problémy:Za prvé, jak již poznamenal Kevin, proměnné shellu musí být uzavřeny do dvojitých uvozovek, pokud mají být shellem rozšířeny. Za druhé, váš náhradní řetězec obsahuje / , takže nemůžete použít / zároveň jako oddělovač pro sed . Pokud víte, že nějaký znak, řekněte , , se rozhodně nevyskytuje v náhradním řetězci, můžete tento znak použít jako sed oddělovač, takže získáte

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

Linux
  1. Zabalit první znak řetězce pomocí Sed?

  2. Alias ​​s proměnnou v bash

  3. Použití grep a sed k nalezení a nahrazení řetězce

  1. Bash skriptování (I)

  2. Použít Sed k přidání znaku na N'-tou pozici shodného řetězce?

  3. Přesměrovat veškerý výstup do souboru pomocí Bash na Linuxu?

  1. Výměna řetězce pomocí slovníku?

  2. Přiřadit pouze část řetězce k proměnné v Bash?

  3. Jak napsat víceřádkový řetězec pomocí Bash s proměnnými?