Geschrieben von master_of_desaster am 01.08.2015 um 22:06:
Shell-Programmierung-> grep searchstring ABER ohne den searchstring drucken
Hi,
diesmal eine Frage an alle Shell-Programmierer! Ich glaube, es ist einfach zu lösen aber ich stehe voll auf'm Schlauch
Mein Anliegen:
Erstmal: es soll in der Bash funktionieren.
Es geht darum, dass ich z.B. eine ellenlange Config-Datei habe.
In dieser will ich einige spezifische Zeilen bearbeiten.
Alle Zeilen,
die bearbeitet wurden, sollen später ausgegeben werden. ->Darum gehts!!!
Wie soll das realisiert werden:
Beim bearbeiten einer Zeile soll gleichzeitig ein Kommentar am Ende der Zeile eingefügt werden, a la
| code: |
1:
|
#geaendert von: $USER |
|
Um dann alle bearbeiteten Zeilen auszugeben kann ich einfach Folgendes grep'en:
Soweit so gut! ABER: die bearbeiteten Zeilen sollen eben OHNE diesen Kommentar ausgegeben werden!
Wie kann man das lösen? Habs mit grep versucht, gepiped über cut etc. pp. aber klappt alles nicht.
Hier nochmal ein vereinfachtes Beispiel, wie so eine komplette Datei mit Kommentaren aussehen kann:
| code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
|
blablzubb toll toll
xyz abc #drkbla #geaendert von: master_of_des
gguzg # uzguzg
bla zack öuikgöuig #geaendert von: master_of_des
hallo #geaendert von: master_of_des
ggg
hallo hi #wie gehts
scfas iug #geaendert von: master_of_des
|
|
-->Davon sollen jetzt alle Zeilen gedruckt werden, die in diesem Fall den String "#geaendert von: master_of_des" enthalten, aber eben OHNE das "#geaendert von: master_of_des"... also Folgendes:
| code: |
1:
2:
3:
4:
5:
6:
|
xyz abc #drkbla
bla zack öuikgöuig
hallo
scfas iug
|
|
Hoffe, es ist verständlich, was ich meine. Tausend Dank im Voraus!!!
Geschrieben von eulerscheZahl am 02.08.2015 um 07:25:
Ich bin selbst nicht gut im Umgang mit bash, geht bestimmt besser.
| code: |
1:
|
grep -i '#geaendert von:' input.txt | grep -o '.*#geaendert von:' | rev | cut -c 16- | rev |
|
erst die Zeilen filtern und den Teil nach dem #geaendert von löschen (mit grep)
dann die Zeile umdrehen (rev)
die ersten 16 Zeichen löschen (cut)
und nochmal umdrehen