2016-06-01 4 views
0

ich eine Reihe von Skripten in einem Verzeichnis haben, die das Format von 120100_0019_0_X0434147_script_name.sql nehmenRegulärer Ausdruck erste N Anzahl von Zeichen außer einem bestimmten Zeichen zu wählen

Ich brauche nur die ersten 11 Nummern wählen (mit Ausnahme der Unterstreichungen

)

Für das obige Skript das Ergebnis ich brauche, ist 12010000190

I unter Verwendung der folgenden Zeile das Ergebnis erhalten, aber ich hatte gehofft, jemand erklären könnte, wie ich dieses Ergebnis erzielen, um eine kürzere Code oder mit sed nur mit .

echo "$SCRIPT" | cut -c 1-13 | sed 's/_//g' 
+0

Was genau meinen Sie mit "Verwendung eines regulären Ausdrucks", da Sie bereits einen regulären Ausdruck (mit sed) verwenden. Und was ist dein Ziel? Sie haben bereits einen Arbeitscode. Suchst du nach einem kürzeren Code? –

+0

Ja, Entschuldigung, ich würde gerne sehen, ob ich den Code kürzen könnte, oder um zu sehen, ob es einen Weg gibt, dies mit sed allein zu erreichen –

Antwort

0

können Sie dies

echo '120100_0019_0_X0434147_script_name.sql' | sed -r 's/_//g; s/(^[0-9]{11}).*/\1/' 

, die die ‚_‘ und wählen Sie dann die ersten 11 Ziffern ignoriert den Rest der Zeile zuerst entfernen.

0

Ohne regulären Ausdruck, können Sie schreiben:

echo "${SCRIPT::13}" | tr -d _ 
1

bash nur Ansatz:

$ script=120100_0019_0_X0434147_script_name.sql 

$ script1=${script//_/} # Remove all _ 
$ script1=${script1:0:11} #Take first 11 characters 
$ echo $script1 
12010000190 

ODER

$ script1=${script//_/} # Remove all _ 
$ script1=${script1/X*/} # Remove everything starting from X 
$ echo $script1 
12010000190 

ODER

$ script1=${script//_/} # Remove all _ 
$ script1=${script1/[^0-9]*/} # Remove everything starting from first non-numeric character. 
$ echo $script1 
12010000190 
Verwandte Themen