我正在创建的shell脚本的一部分采用纯文本文件列表...
11111.jpg
22222.jpg
33333.jpg
...并附加存储在变量中的用户定义前缀,以创建如下所示的路径列表:
user/defined/prefix/11111.jpg
user/defined/prefix/22222.jpg
user/defined/prefix/33333.jpg
我试图用sed以这种方式添加前缀:
sed -e 's/^/prefix/' oldFile > newFile.new
正确分配变量:
echo $selectedPrefix
user/defined/prefix
不要使用单引号的组合,似乎使用sed的双引号来使用变量的ACTUAL值而不仅仅是变量名。
sed -e 's/^/$selectedPrefix/' oldFile > newFile.new
收率:
$selectedPrefix11111.jpg
$selectedPrefix22222.jpg
$selectedPrefix33333.jpg
帮助!我确信解决方案很简单,但我觉得我已经尝试了所有的东西......
答案 0 :(得分:1)
正如Cyrus所提到的,如果你想要变量替换,你需要使用“(双引号)代替”(单引号),因为单引号字符串是按字面解释的,因此它不会将$ selectedPrefix视为变量而是作为变量所以你看到的是$ selectedPrefic的字符串值。
由于您正在使用sed中的路径,因此您认为应该为sed注释使用不同的分隔符是正确的。我通常更喜欢使用|
,但~
也可以使用。
所以基本上你可以:
sed -e "s~^~$selectedPrefix~" oldFile > newFile.new
答案 1 :(得分:0)
此代码可以解决您的问题:
selectedPrefixEscaped="$(echo "$selectedPrefix" | sed 's/\//\\\//g')" && sed -e "s/^/$selectedPrefixEscaped/" oldFile > newFile.new
在sed
上使用不同的分隔符会让您在(如果)路径包含新分隔符时遇到问题(例如:/ folder/folder#5/file.txt如果使用#会有问题)作为sed
分隔符。)