Как манипулировать строкой, переменной в оболочке - PullRequest
0 голосов
/ 30 декабря 2010

Привет всем!

У меня есть эта переменная в оболочке, содержащая пути, разделенные пробел:

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

Я хочу добавить дополнительную строку пути в начало строки, а также сразу после пробела, чтобы переменная получала результат примерно так:

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

Я пробовал это, но получаю только старые пути

#!/bin/bash

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

Любая помощь приветствуется Заранее спасибо

Ответы [ 5 ]

2 голосов
/ 30 декабря 2010

Это, конечно, портит все предыдущие аргументы, которые вам может понадобиться сохранить.

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

Протестировано в bash / dash / ksh.

Редактировать: При сохранениинужны исходные аргументы, это может быть полезно:

orig=$@
<stuff from above>
set $orig
1 голос
/ 30 декабря 2010

Поскольку вы используете Bash:

Если дополнения одинаковы для каждой части:

LINE="/path/to/manipulate1 /path/to/manipulate2"
array=($LINE)
LINE=${array[@]/#//additional/path/to/}

Если они разные:

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[@]}

Илиболее гибко:

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[@]}
1 голос
/ 30 декабря 2010
$ 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 голос
/ 30 декабря 2010
firstPath=$(echo $LINE | cut -d' ' -f1)
secondPath=$(echo $LINE | cut -d' ' -f2)

firstPath="/additional/path1/to$firstPath"
secondPath="/additional/path2/to$secondPath"
0 голосов
/ 30 декабря 2010
NEW_PATH=`echo $LINE |  sed "s/^\([^ ]\+\) \([^ ]\+\)/\/add1\1 \/add2\2/"`

Результаты в NEW_PATH =

/ add1 / путь / к / манипулировать1 / добавить2 / путь / к / манипулировать2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...