2017-06-07 6 views
0

Ich muss Bash-Skript schreiben, das eine Zeichenfolge von nur ganzen Zahlen "IntString" in :id konvertiert. intString existiert immer nach /, darf niemals andere Typen enthalten (create_step2 ist kein gültiger intString) und kann entweder bei einem zweiten / enden oder am Zeilenende enden. intString kann 1-8 Zeichen lang sein. Das Skript muss für jede Zeile in einer Datei wiederholt werden.Wie ersetze ich rekursiv Teil einer Zeichenfolge durch eine andere angegebene Zeichenfolge in bash?

Zum Beispiel: /sample/123456/url soll /sampleurl/:id jedoch /sample_url_2/-/sample/:id/url und /sample_url/9 umgewandelt werden sollten sollte gleich bleiben umgewandelt werden.

Jede Hilfe wäre willkommen!

+0

Wenn du deine Arbeit bisher nicht zeigen willst und einfach fragst, ob jemand sie für dich schreiben kann, bitte gib uns die Höflichkeit, dein Projekt zu erklären oder eine Begründung dafür, warum wir dir helfen sollten, in deiner Klasse zu schummeln. –

Antwort

0

Es scheint wie der lange Weg um das Problem rekursiv zu gehen, aber dann weiß ich nicht, welches Problem Sie lösen. Es scheint wie ein guter sed Befehl wie

sed -E 's/\/[0-9]{1,}/\/:id/g' 

könnte es in einem Schuss tun, aber wenn man dann könnte es so etwas wie dieses rekursiven besteht auf sein geht ...

#!/bin/bash 

function restring() 
{ 
    s="$1" 
    s="$(echo $s | sed -E 's/\/[0-9]{1,}/\/:id/')" 

    if (echo $s | grep -E '\/[0-9]{1,}' > /dev/null) ; then 
     restring $s 
    else 
     echo $s 
     exit  
    fi 

    echo $s 
} 

restring "$1" 

jetzt führen Sie es

$ ./restring.sh "/ foo/123/bar/456/baz/45435/andstuff"

/foo /: id/bar /: id/baz /: id/andstuff

Verwandte Themen