2012-07-13 24 views
76

Sto scrivendo script di shell per Linux incorporato in una piccola scatola industriale. Ho una variabile contenente il testo pid: 1234 e voglio togliere i primi caratteri X dalla linea, quindi rimane solo 1234. Ho più variabili che ho bisogno di "pulire", quindi ho bisogno di tagliare X primi caratteri e ${string:5} non funziona per qualche motivo nel mio sistema.Come posso rimuovere i primi caratteri X dalla stringa usando sed?

L'unica cosa che sembra avere la casella è sed.

io sto cercando di fare quanto segue per lavorare:

result=`echo "$pid" | sed 's/^.\{4\}//g'` 

Tutte le idee?

+6

Se '$ {stringa: 5}' non funziona, non si utilizza Bash o un'altra shell che supporta quella sintassi. Che shell e versione stai usando? Com'è il tuo Shebang? La mia ipotesi è che tu stia usando 'sh' (come' dash') o possibilmente 'zsh'. –

risposta

17

Questo farà il lavoro troppo:

echo "$pid"|awk '{print $2}' 
42

Utilizzare l'-r opzione ("uso prolungato espressioni regolari nello script") per sed al fine di utilizzare il {n} sintassi:

$ echo 'pid: 1234'| sed -r 's/^.{5}//' 
1234 
+1

Grazie, è stata una rapida risposta! Funziona! – Kokesh

+1

come sarebbe per il caso, se volessi togliere gli ultimi X caratteri da una stringa? – Kokesh

+5

@Kokesh: puoi fare 'sed -r 's /. {5} $ //'' per rimuovere gli ultimi 5 caratteri invece –

6

Le probabilità sono, avrai anche cut. Se è così:

[[email protected]]$ echo "pid: 1234" | cut -d" " -f2 
1234 
+2

Ho già provato CUT, ma le possibilità sono limitate :) – Kokesh

+1

Problemi con ' cut' è che non gestisce sensibilmente le sequenze di spazi vuoti, usando 'tr -s '' per" spremere "gli spazi rende il comportamento migliore. – Thor

+1

Non è pensato per essere uno strumento per cantare tutti gli strumenti per ballare; è semplice e fa come dice la lattina ed è ampiamente disponibile. Dovrebbe funzionare bene per i suddetti requisiti ed è sicuramente più robusto che ritaglia i caratteri fissi da posizioni specifiche. –

125

Il seguente dovrebbe funzionare:

var="pid: 1234" 
var=${var:5} 

Sei sicuro bash è la shell di eseguire lo script?

+0

Ha funzionato a meraviglia. –

+4

Questa dovrebbe essere la risposta accettata! – ndmeiri

4

pipe through awk '{print substr($0,42)}' dove 42 è uno più del numero di caratteri da rilasciare. Per esempio:

$ echo abcde| awk '{print substr($0,2)}' 
bcde 
$ 
45

Ecco un metodo conciso per tagliare i primi X caratteri utilizzando cut(1). Questo esempio rimuove i primi 4 caratteri.

echo "$pid" | cut -c 4- 
+1

Questa è la soluzione più semplice! – Brandon

6

Cut primi due caratteri dalla stringa:

string="1234567890"; echo "${string:2}" 
+0

Questo non funziona. – luckytaxi

+0

@ dtp70 Grazie mille una risposta generica, ha funzionato alla grande! – wolfram77

1

altro modo, utilizzando cut anziché sed.

result=`echo $pid | cut -c 5-` 
+0

Vuole rimuovere i primi 4 caratteri. Questo ottiene i primi 4 caratteri. –

+1

Modificato il codice per utilizzare il taglio al posto della testa. – Evgeny

Problemi correlati