如何在shell中操作字符串变量

时间:2010-12-30 09:50:45

标签: shell unix

嘿大家!

我在包含路径的shell中有这个变量 空间:

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 个答案:

答案 0 :(得分:2)

这些课程会混淆你之前可能需要保留的任何论点。

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

在bash / dash / ksh中测试。

编辑:如果需要保留原始参数,这可能很有用:

orig=$@
<stuff from above>
set $orig

答案 1 :(得分:1)

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

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

答案 2 :(得分: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

答案 3 :(得分:1)

因为你正在使用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[@]}

答案 4 :(得分:0)

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

结果为NEW_PATH =

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