嘿大家!
我在包含路径的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"
任何帮助表示赞赏 提前致谢
答案 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