Variabel in sed

7

Ich habe eine Datei, die Dateinamen mit absolutem Pfad enthält.

In der Mitte dieses Pfades befindet sich ein Variablenverzeichnis. Wenn ich den variablen Teil hart codiere, funktioniert er einwandfrei. Wenn ich ihn jedoch durch den Variablennamen ersetze, sedfunktioniert der Teil nicht.

Der sedTeil besteht darin, das Muster oder in diesem Fall den Pfad zu löschen.

file=`echo $one_file | sed 's:/dir1/dir2/$VAR/last_dir/::'`
Boston
quelle
Versuchen Sie, einfache Anführungszeichen in Ihrem sed-Ausdruck durch doppelte Anführungszeichen zu ersetzen.
dnk

Antworten:

8

Wenn Sie einfache Anführungszeichen verwenden, werden Variablennamen nicht erweitert. Sie müssten doppelte Anführungszeichen verwenden, auch bekannt als weiche Anführungszeichen.

sed "s:/dir1/dir2/$var/Last_dir/::"

oder entkommen Sie den Anführungszeichen:

sed 's:/dir1/dir2/'"$var"'/Last_dir/::'

Sie müssen auch sicherstellen, dass $varkeine Doppelpunkt-, Punkt-, Stern- [, Zeilenumbruch- oder Backslash-Zeichen enthalten sind oder dass sie in diesem Fall maskiert werden.

Runium
quelle
$ s = "foo | bar"; echo foobar | sed 's #. * #' "$ s" '#;' funktioniert ... ??
Jirib
@JiriXichtkniha: Ja, aber wenn es eine #, neue Zeile usw. gibt, würden Sie Probleme haben.
Runium