2010-12-30 7 views
0

Hei alle!Wie eine Zeichenfolge zu manipulieren, variable in der Shell

Ich habe diese Variable in der Schale Pfade durch einen Raum getrennt sind, enthaltend:

LINE="/path/to/manipulate1 /path/to/manipulate2" 

Ich möchte Zeichenfolge zusätzlichen Pfad in dem Anfang der Zeichenfolge hinzuzufügen und auch direkt nach dem Raum, so dass die Variable haben das Ergebnis in etwa so:

LINE="/additional/path1/to/path/to/manipulate1 /additional/path2/to/path/to/manipulate2" 

ich dieses versucht, aber bekommen nur die alten Pfade

#!/bin/bash 

LINE="/path/to/one /path/to/two" 
NEW_PATH=`echo $LINE | sed "s/^\([^ ]\+\) \([^ ]\+\)/\/add1\1 \/add2\2/"` 
echo "$NEW_PATH" 

Jede Hilfe willkommen Vielen Dank im Voraus

+1

Also, was Sie hinzufügen möchten? Was ist 'path1' im ersten Fall und' path2' im zweiten Fall? Oder meintest du, das Gleiche für beide hinzuzufügen? – plundra

+0

Es ist eigentlich egal, will nur wissen, wie etwas vor der Zeichenfolge und etwas anderes nach dem Leerzeichen hinzufügen. – user558134

+0

Ja, ich habe es nach einem erneuten Lesen bekommen. Habe meinen Kaffee noch nicht fertig. – plundra

Antwort

1
firstPath=$(echo $LINE | cut -d' ' -f1) 
secondPath=$(echo $LINE | cut -d' ' -f2) 

firstPath="/additional/path1/to$firstPath" 
secondPath="/additional/path2/to$secondPath" 
+0

das funktioniert gut;) – user558134

+0

@ user558134: Denken Sie daran, diejenigen Antworten zu verbessern, die sich als nützlich für Ihr Problem erweisen, auch, als akzeptiert, derjenige, der es löst. ;) –

0
NEW_PATH=`echo $LINE | sed "s/^\([^ ]\+\) \([^ ]\+\)/\/add1\1 \/add2\2/"` 

Ergebnisse in neuer_pfad =

/add1/path/to/manipulate1/add2/path/to/manipulate2

+0

Möchte diesen Backticks entkommen oder '$ (...)' verwenden – plundra

+0

danke, fertig :) – Ass3mbler

+0

Ich habe es versucht: NEW_PATH = $ (echo $ LINE | sed "s/^ \ ([^] \ + \) \ ([^] \ + \)/\/add1 \ 1 \/add2 \ 2/"), aber kein neuer Pfad – user558134

2

Diese von Kurse verwirren mit allen vorherigen Argumenten, die Sie behalten müssen.

set $LINE 
LINE="/additional/path1$1 /additional/path2$2" 

Getestet in bash/dash/ksh.

Edit: die ursprünglichen Argumente Wenn halten erforderlich ist, könnte dies nützlich sein:

[email protected] 
<stuff from above> 
set $orig 
+0

Dieser funktioniert gut;) – user558134

1
$ test="/sbin /usr/sbin /bin /usr/bin /usr/local/bin /usr/X11R6/bin" 

$ test2=$(for i in $test; do echo "/newroot${i}"; done) 

$ echo $test2 
/newroot/sbin /newroot/usr/sbin /newroot/bin /newroot/usr/bin /newroot/usr/local/bin /newroot/usr/X11R6/bin 
1

Da Sie Bash verwenden:

Wenn die Zugaben das gleiche für jeweils Teil:

Wenn sie unterschiedlich sind:

LINE="/path/to/manipulate1 /path/to/manipulate2" 
array=($LINE) 
array[0]=/additional/path1/to${array[0]} 
array[1]=/additional/path2/to${array[1]} 
LINE=${array[@]} 

Oder flexibler:

LINE="/path/to/manipulate1 /path/to/manipulate2" 
array=($LINE) 
parts=(/additional/path1/to /additional/path2/to) 
if ((${#array[@]} == ${#parts[@]})) 
then 
    for ((i=0; i<${#array[@]}; i++)) 
    do 
     array[i]=${parts[i]}${array[i]} 
    done 
fi 
LINE=${array[@]} 
Verwandte Themen