2016-06-27 4 views
0

Zum Beispiel habe ich:Wie lösche ich eine Zeichenkette mit demselben Wort und fortlaufend steigende Zahl in einer Textdatei mit einem Shell-Skript?

Hello1 : 
Hello2 : 
Hello3 : 

Wie konnte ich alle diese mit einem Shell-Skript löschen. Die Zahl reicht den ganzen Weg bis 1000.

+3

Haben Sie versucht, 'sed -i '/^Hallo [0-9] [0-9] * []:/d' Dateiname'? Wenn hinter dem '' '' noch zusätzlicher Text steht (oder Sie die gesamte Zeile löschen wollen), können Sie 'sed -i '/^Hallo [0-9] [0-9] * []:. * $ Verwenden/d 'filename' –

Antwort

2
sed -i '/^Hello[[:digit:]]\+\>/d' file.txt 

Oder, wenn Sie in eine andere Datei ausgegeben werden soll:

sed '/^Hello[[:digit:]]\+\>/d' file.txt > newfile.txt 
+0

Sie könnten ein bisschen mehr Erklärung hinzufügen, die Ihnen ein paar Upvotes und eine Akzeptanz bringt. –

+0

Nun, es beinhaltet ein wenig Wissen in sed.Das Wesentliche ist das d ist ein Löschbefehl, und die Sache davor ist die Regex, um Zeilen zu treffen, auf die der Befehl angewendet werden soll. Jedes weitere Detail wäre eine Erklärung der Ed-Grammatik oder der Regex-Grammatik. – Taywee

2

Wenn Sie alle Zeilen löschen, die nur Hello(number) : Verwendung unten enthalten :

Probeneingang in file

Hell 
Hello1 : 
No hello stuff here 
Unjulating stuff 
Hello2 : 
Some sentence 
Hello99 : 

Script

sed -Ei '/^Hello[[:digit:]]+ :$/d' file 

Beispielausgabe im modifizierten file

Hell 
No hello stuff here 
Unjulating stuff 
Some sentence 

Was

  1. Mit der ^ im Muster über geschieht, werden wir für den Anfang überprüfen der Linie.
  2. Wir überprüfen das Muster Hello(number) : mit Hello[[:digit:]]+ :$. Beachten Sie, dass ich -E verwendet habe, um erweiterte Ausdrücke für sed extended zu aktivieren, so dass ich das + ie (\+) nicht entgehen muss. Hier [[:digit:]] ist eine Klasse, die enthält alle Dezimalstellen und + wird verwendet, um zu überprüfen, ob das Muster vor es mindestens einmal übereinstimmt.
  3. das Ende der Linie prüfen $
  4. Für ein angepasstes Muster verwenden, es löschen Linie der d Option
  5. ich auch die sed inplace edit Option verwendet habe -i, damit die Änderungen in die Datei direkt gespeichert werden.

Wenn Sie die eine Linie der beginnt mit Hello(number) : dann benutzen Sie das folgende Skript

sed -Ei '/^Hello[[:digit:]]+ :/d' file 

Sie haben vielleicht bemerkt ändern möchten, dass ich nur die $ entfernt, so dass unsere Muster jede Zeile übereinstimmt, die mit beginnt Hello(number) :

Hoffe, das hilft.