我在bash中有以下变量:
var1="this is ok"
并且在文件中我想在所有行中生成subst:
_day 23. 45. 56. ...
到
this is ok_day 23. 45. 56.
所以我将var1添加到行的开头
我试过这个
sed -e "s/_/${var1}"_"/g" ${filename}
但我得到错误
我不知道这是不是因为空格。我在sed上将/
标记为|
,但没有任何内容
任何提示?
由于
答案 0 :(得分:3)
您不需要在_
周围使用双引号,也不应添加g
小叶修饰符:
sed -e "s/_/${var1}_/" "${filename}"
$var1
中的空格应该不是问题。 $filename
中的空格可能是个问题。
答案 1 :(得分:2)
你可以使用shell
#!/bin/bash
var1="this is ok"
while read -r line
do
case "$line" in
_* ) line=${var1}$line;;
esac
echo $line
done <"file"
输出
$ cat file
sldfj
_day 23. 45. 56.
alskjf
$ ./shell.sh
sldfj
this is ok_day 23. 45. 56.
alskjf
如果你绝对想要使用sed,
sed -e "/^_/s/^/$var/" file
或使用awk
awk -v var="$var" '/^_/{$0=var $0 }1' file
答案 2 :(得分:1)
您提供的替代模式不会将$var1
放在行的开头:
sed -e "s/^/$var1/g" "${filename}"
答案 3 :(得分:0)
var1="this is ok";
echo _day 23. 45. 56. |
sed "s/^/${var1}/"
输出
this is ok_day 23. 45. 56.
或者,使用awk(不要乱用regexp,这不是必需的)
echo _day 23. 45. 56. |
awk '{print "'"$var1"' " $1}' < abc.txt
答案 4 :(得分:0)
在这种情况下,用单引号括起“这是好的”,而不是双引号。
如:
$ var1 ='这没关系'
原因是shell根据使用的引号不同地处理空格....