701 Stimmen

Mehrzeiliger String mit zusätzlichem Leerzeichen (erhaltene Einrückung)

Ich möchte einige vordefinierte Texte in eine Datei schreiben mit folgendem:

text="das ist Zeile eins\n
das ist Zeile zwei\n
das ist Zeile drei"

echo -e $text > dateiname

Ich erwarte etwas wie das hier:

das ist Zeile eins
das ist Zeile zwei
das ist Zeile drei

Aber ich bekomme das hier:

das ist Zeile eins
 das ist Zeile zwei
 das ist Zeile drei

Ich bin sicher, dass kein Leerzeichen nach jedem \n vorhanden ist, aber woher kommt das zusätzliche Leerzeichen?

2voto

Anonymous robot Punkte 55

In bash und dash (die, die ich getestet habe, sollten auch für deine funktionieren), kannst du einige Python-Style-Dreifach-Anführungszeichen-Strings verwenden:

echo """Hallo
Welt!"""

Dies ergibt:

Hallo
Welt!

1voto

Beni Trainor Punkte 356

Es gibt viele Möglichkeiten, es zu tun. Für mich funktioniert es gut, den eingerückten String in sed zu leiten.

printf_strip_indent() {
   printf "%s" "$1" | sed "s/^\s*//g" 
}

printf_strip_indent "das ist Zeile eins
das ist Zeile zwei
das ist Zeile drei" > "datei.txt"

Diese Antwort basierte auf der Antwort von Mateusz Piotrowski, wurde aber etwas verfeinert.

0voto

it3xl Punkte 1754

Nur um eine einfache einzeilige Verkettung zu erwähnen, da sie manchmal nützlich sein kann.

# für bash

v=" guga "$'\n'"   puga "

# Nur ein Beispiel.
v2="bar "$'\n'"   foo "$'\n'"$v"

# Lass uns die vorherige Version von $v2 vereinfachen.
n=$'\n'
v3="bar ${n}   foo ${n}$v"

echo "$v3" 

Sie erhalten etwas Ähnliches wie das Folgende

bar 
   foo 
 guga 
   puga 

Alle führenden und endenden Leerzeichen werden genau für

echo "$v3" > filename

0voto

ish-west Punkte 81

Oder Text mit Leerzeichen eingerückt behalten:

#!/bin/sh

sed 's/^[[:blank:]]*//' >filename <

`

Dasselbe, aber unter Verwendung einer Variablen:

#!/bin/sh

text="$(sed 's/^[[:blank:]]*//' << whatever
    Dies ist Zeile eins
    Dies ist Zeile zwei
    Dies ist Zeile drei
)"

echo "$text" > filename

;-)

`

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X