ubuntuusers.de

string übergeben

Status: Gelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

muhkuh2008

Anmeldungsdatum:
13. April 2008

Beiträge: Zähle...

hallo @ll,

wie kann ich eine variable in shell wie z.b string=42 in ein textfile einfügen.Diese Varibale soll zwischen zwei Wörter z.b "das ergbebnis" " ist gut" eingefügt werden. Ergebniss soll so aussehen: "das ergbebnis 42 ist gut"

danke in voraus

Hello_World

Anmeldungsdatum:
13. Juni 2006

Beiträge: 3620

sed "s/das ergebnis ist gut/das ergebnis $string ist gut/"

muhkuh2008

(Themenstarter)

Anmeldungsdatum:
13. April 2008

Beiträge: 9

Danke wollte noch hinzufügen

das ergebnis ist skdjhfjskdhfs sdkjfskdjfskdljfslkd gut

danach soll es so aussehen

das ergebnis ist (dann neue zeile) skdjhfjskdhfs sdkjfskdjfskdljfslkd 42 (dann neue zeile) gut

also 42 soll immer vor "gut geaddet werden"

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17625

Wohnort: Berlin

Eventuell ist hier auch der Präprozessor, wie man ihn von C/C++ kennt, oder die nahezu unbekannten Makroprozessoren - ich glaube m4 heißt einer - gut geeignet, das Problem zu lösen.

template:

#include "data" 

Das Ergbebnis 
ist ERG 
gut.

data:

#define ERG skdjhfjskdhfs sdkjfskdjfskdljfslkd 42

Aufruf:

cpp template 

An m4 habe ich aber kaum noch Erinnerung. So oder so - auch wenn man mit sed arbeitet, kann eine selbstdefinierte Auszeichnung die Arbeit vereinfachen. Hier:

Das Ergbebnis 
ist ~~ERG~~ 
gut.

kann das sed-Kommando 's/~~ERG~~/foobar 42/' lauten, und man muß nicht ein 'ist ' mit weiteren Randbedingungen suchen.

Der Weg mit dem Präprozessor erzeugt dagegen sowas:

# 1 "template"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "template"
# 1 "data" 1
# 2 "template" 2

Das Ergbebnis
ist skdjhfjskdhfs sdkjfskdjfskdljfslkd 42
gut.

- wie man oben den Krempel unterdrückt wüßte ich auch nicht, außer mit sed, tail, grep wieder, und dann kann man die auch wieder gleich nutzen.

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

Hi muhkuh,

egal wie Du es einfügst, Du musst Dir natürlich einen "Anker" aussuchen, vor, hinter oder zwischen dem Du Deine Variable einfügst.
Das kann Dir niemand abnehmen.

Wie Du es dann tatsächlich einfügst, mit oder ohne extra Zeilenvorschub, das ist dann letztlich Geschmacksache.
Das geht genau so gut mit "Parameter Expansion" ( http://mywiki.wooledge.org/BashFAQ/073 )
wie mit sed ( http://www.tty1.net/sed-tutorium/sed-tutorium.html ) oder awk ( http://www-e.uni-magdeburg.de/urzs/awk/ ).

Perl wäre wohl auch noch eine Möglichkeit, aber da bin ich unterbelichtet.

Wie gesagt, zuerst musst Du Dir den Aufhänger für Deinen Filter überlegen, die Umsetzung danach ist nicht so schwierig.

Wenn Du es immer, vor jedem Auftreten des Wortes "gut" einfügen willst, wäre es genau wie user unknown oben schon schrieb eine Ersetzung, z.B. mit sed und Zeilenumbruch:

sed "s/ gut / $string\ngut /"

LG,

track

Antworten |