2016-07-29 20 views
0

Ich habe eine Datei mit dem folgenden Inhalt.So extrahieren Sie Zahlen aus den eckigen Klammern in Unix

abc.[1-3].title 
simple.0[1-2].title 

Ich brauche Hilfe, um die Ausgang wie unten mit sed und awk Befehle zu holen.

abc.1.title 
abc.2.title 
abc.3.title 
simple.01.title 
simple.02.title 
+0

Siehe [wie ich es bearbeitet habe] (http://stackoverflow.com/posts/38659612/revisions). Für Code- oder Beispieldateien können Sie die Linien auswählen und dann Strg + K drücken, um diese Fantasie zu haben. – fedorqui

+0

Sicher, wird dies vorwärts gehen. – Sai

+0

Jetzt wäre es gut zu zeigen, was Sie bisher versucht haben. Da du mit awk und sed getaggt hast, musst du ein bisschen davon wissen! – fedorqui

Antwort

3

Sed ist für die einfache Substitution von einzelnen Linien, die alle ist. Für alles andere, z.B. Ihr aktuelles Problem, sollten Sie awk verwenden:

$ cat tst.awk 
BEGIN { FS="[][]" } 
{ 
    split($2,r,/-/) 
    for (i=r[1]; i<=r[2]; i++) { 
     print $1 i $3 
    } 
} 

$ awk -f tst.awk file 
abc.1.title 
abc.2.title 
abc.3.title 
simple.01.title 
simple.02.title 

Lesen Sie das Buch Effective awk-Programmierung, 4. Auflage, von Arnold Robbins.

+1

Schön! Ich hatte mit 'awk -F [] [-]' 'gespielt {für (i = $ 2; i <= $ 3; i ++) drucke $ 1 i $ NF}' Datei ', um den Aufruf von 'split()' zu verhindern. – fedorqui

+1

Zum ersten Satz - Unsinn! Sed ist auch für die Herstellung von Quines und für das Spielen von Code-Golf und allerlei anderen aufregenden, wichtigen Aktivitäten! –

+1

@WilliamPursell Sie haben Recht. Ich habe den ganzen mentalen Übungsaspekt vergessen :-). Ich vermute auch, dass einige sed-Skripte das Wetter kontrollieren können ... –

Verwandte Themen