用空格代替sed

时间:2010-01-26 11:49:40

标签: bash sed

我在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上将/标记为|,但没有任何内容

任何提示?

由于

5 个答案:

答案 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根据使用的引号不同地处理空格....