2017-11-29 8 views
0

Welchen Befehl konnte ich in einer Zeile schreiben, die diesen Text drehen würden:Unix: Hinzufügen und Einrücken des sed Befehl

apple 
blueberry 
raspberry 
strawberry 
blackberry 
mango 
orange 

in dieser:

apple 
berries: 
    blueberry 
    raspberry 
    strawberry 
    blackberry 
mango 
orange 
+0

Wo ist die Einrückung? – mikep

+2

Woher kamen die 'Beeren:'? Können Sie uns die Logik erklären, die Sie implementieren möchten? Vielen Dank – Allan

Antwort

0

Auf einer simplen Ebene, dies tut mehr oder weniger, was Sie fragen:

grep -v "berry" original.txt; echo "berries:"; sed -ne '/berry/s/^/ /p' original.txt 

Beispielausgabe

apple 
mango 
orange 
berries: 
    blueberry 
    raspberry 
    strawberry 
    blackberry 

Das sagt ... finden Sie alle Linien NICHT "berry" in original.txt enthalten, weil grep -v eine negative Suche ist. Dann druckt es den Titel "Beeren". Dann startet ein neuer sed mit -n, so dass standardmäßig nichts ausgedruckt wird. Auf Zeilen, die "berry" entsprechen, ersetzt es den Anfang der Zeile durch 3 Leerzeichen und druckt dann die Zeile mit .

Es wird „Loganbeere“ finden, aber es wird nicht funktionieren erwartet, wenn „Erdbeeren“ im Original erscheinen. Es wird auch die „Beeren“ drucken Titel, auch wenn es keine Beeren in der Datei ...

0

lassen Sie Ihre Quelldatei sein input.txt

wir unten Code verwenden können füge ein Register beim Starten jeder Zeile, die die Zeichenfolge Beeren

sed '/berry/s/^/\t/' input.txt 
012 enthält

optional -i Option verwenden, um die Quelldatei selbst ändern

sed -i '/berry/s/^/\t/' input.txt 

Dann Beeren Überschrift hinzuzufügen: können wir unten verwenden,

sed 's/berry/berries:\n&/g' input.txt 

Hinweis : Angenommen, die Eingabedatei ist so sortiert, dass alle Beeren nebeneinander liegen.