Sie sind nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: Linux Forum Linux-Web.de. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

1

25.06.2004, 14:25

Texte in einer Datei in einer bestimmten zeile einzufügen

Hi @all,

gibt es eine möglichkeit Texte in einer Datei in einer bestimmten zeile einzufügen ? Ich hab z.B. eine Datei mit folgenden layout:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#======================================
# User alias specification   **ANFANG**
#======================================


# User Alias - TEST1
# ------------------
#
User_Alias TEST1 = test_user1


#======================================
# User alias specification     **ENDE**
#======================================

In dieser Datei würde ich gerne noch folgendes einfügen:

Quellcode

1
2
3
4
# User Alias - TEST1
# ------------------
#
User_Alias TEST1 = test_user1

Am schluss soll die Datei folgender masen aussehen

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#======================================
# User alias specification   **ANFANG**
#======================================


# User Alias - TEST1
# ------------------
#
User_Alias TEST1 = test_user1


# User Alias - TEST2
# ------------------
#
User_Alias TEST2 = test_user2


#======================================
# User alias specification     **ENDE**
#======================================

Hat jemand eine IDEE wie ich sowas für ein skript realisiren könnte ?

2

27.06.2004, 12:57

RE: Texte in einer Datei in einer bestimmten zeile einzufügen

ist es immer an der gleichen position?
uno sciocco trova sempre un altro sciocco che lo ammira

Neo23X0

Fortgeschrittener

  • »Neo23X0« ist männlich

Beiträge: 322

Beruf: IT Consultant

  • Nachricht senden

3

27.06.2004, 14:18

einfach dran cat'en

cat file2 >> file1

Die Zeilen, die mit einem # beginnen sind doch eh nur kommentarzeilen.

guru@linux:~> who I grep -i blonde I talk; cd ~;
wine; talk; touch; unzip; touch; strip; gasp; finger;
mount; fsck; more; yes; gasp; umount; make clean; sleep;

tierralinda.de

4

28.06.2004, 10:37

@tuxland

Nein, es sind nicht immer die Gleiche Zeile ... Aber das ist kein Prob das heraus zu finden

Quellcode

1
LINE=$(( $( awk '/^# User alias specification.*ENDE/{ print NR }' $FILE ) - 2 ))
In der Variablen LINE steht nun die Zeilen nummer, in dem der Text rein kommen soll.

@Neo23X0
Das ist leichter gesagt als getan ... Die datei Unterteil sich in 3 Abschitten ... Das ist nur ein Stück davon ... und das ist auch das Prob. Ich muss sie immer in einer Bestimmten zeile Schreiben.

Ich suche schon die ganze Zeit nach einer Möglichkeit es mit sed zu lösen, in dem ich sed sag, dass er den text einfach ab Zeile $LINE einfügen soll, aber ich blick nicht wie ich das mit sed machen soll :(

strcat

Unix Gladiator

  • »strcat« ist männlich

Beiträge: 2 331

Wohnort: /Earth/Germany/Bavaria/Regensburg

  • Nachricht senden

5

28.06.2004, 14:16

$ sed '23a\
erste neue Zeile\
zweige neue Zeile \
dritte neue Zeile' text > text.neu

oder per Script ohne sed

Quellcode

1
2
3
4
5
6
7
8
9
10
typeset -i i=0

while read line ; do
  i=i+1
  if [ $i = 23 ] ; then
    echo "erste neue zeile"
    echo "zweite neue zeile"
  fi
  echo $line
done <datei


Oder mit ed(1). Oder mit perl(1). Oder awk(1). Oder python(1). Oder C/C++. Oder ..
Christian 'strcat' Schneider <http://www.strcat.de/>
/* When all else fails, read the instructions. */

6

28.06.2004, 16:44

@strcat
Danke für dein Post ...
Ich hab gesehen, dass es im sed, den Schalter -i gibt, mit dem kann man dierekt in die Datei reinschreiben, ich hab es nun folgendermasen gelöst:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# VARIABLEN
# ---------
#
FILE=test_sudo2
TEXT_NR=$(( $( awk '/^# User alias specification.*ENDE/{ print NR }' $FILE ) - 2 ))
DATEN1=a


while read TEXT
 do
   sed -i "$TEXT_NR a\ $TEXT" $FILE

   TEXT_NR=$((TEXT_NR+1))
 done < $DATEN1

# Einfuegen von zwei LEERZEICHENS
# -------------------------------
#
sed -i "$TEXT_NR a\ " $FILE
sed -i "$TEXT_NR a\ " $FILE


Somit schreibt er mir das gleich in die Datei rein...
Aber die Ausgabe sieht dann folgendermasen aus:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#======================================
# User alias specification   **ANFANG**
#======================================


# User Alias - TEST1
# ------------------
#
User_Alias TEST1 = test_user1

 # User Alias - TEST2
 # ------------------
 #
 User_Alias TEST2 = test_user2
#======================================
# User alias specification     **ENDE**
#======================================


Er macht blöder weiße mir einen Leerzeichen rein, da ich in meinen code folgendes drinstehen hab

Quellcode

1
sed -i "$TEXT_NR a\ $TEXT" $FILE
Das leerzeichen nach \a $TEXT wird auch eingefügt :( Wie kann ich da unterbinden ? Ich hab schon folgendes Probiert

Quellcode

1
sed -i "$TEXT_NR a\ {$TEXT}" $FILE
Hat aber nicht gefunkt, weil er mir das auch mit reingebracht hat und er mir dann folgendes aus gegeben hat:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#======================================
# User alias specification   **ANFANG**
#======================================


# User Alias - TEST1
# ------------------
#
User_Alias TEST1 = test_user1

 {# User Alias - TEST2}
 {# ------------------}
 {#}
 {User_Alias TEST2 = test_user2}
#======================================
# User alias specification     **ENDE**
#======================================

Hat jemand eine IDEE, wie ich die Leerzeichen weg bekomme ?

strcat

Unix Gladiator

  • »strcat« ist männlich

Beiträge: 2 331

Wohnort: /Earth/Germany/Bavaria/Regensburg

  • Nachricht senden

7

28.06.2004, 16:48

Dann lass das Leerzeichen nach dem "a\" weg, aber was fuer eine Rolle spielt es ueberhaupt ob am Zeilenanfang ein Leerzeichen ist oder nicht (ausser gar keine mein ich)?
Christian 'strcat' Schneider <http://www.strcat.de/>
/* When all else fails, read the instructions. */

8

28.06.2004, 16:54

Wenn ich das Leerzeichen weg lasse, dann erkennt er die Variable nicht mehr :(
Klar spield das Keine Rolle, aber das sieht halt vom format her nicht so gut aus ...

9

28.06.2004, 18:34

Lange habe ich probiert, dass ich nicht gleich drauf gekommen bin !
Also so funktioniert das:

Quellcode

1
sed -i "$TEXT_NR a\\$TEXT" $FILE

Ich hab den entgültingen code noch nicht fertig, ich werde wenn ihr möchtet mein skript dann posten ...
Das skript soll am schluss folgendes können, es werden 3 Datein erstellt, in dem die Definitionen für die Sudoers stehen, wenn man das Skript ausführt, werden diese Definitionen über das skript automatisch in die Sudo eingetragen... Das wird dann über scp an alle server Copiert und dann ausgeführt. Das erleichert einem wirklich viel arbeit...

Ich möchte mich bei allen bedanken, die mir hier geholfen haben . DANKE !

gruß

geist_Der_foren

Thema bewerten