BASH:sed -e不允许我的变量

时间:2013-08-25 00:33:02

标签: bash sed

我的sed命令不接受我的行变量:(

linenumber=`grep -n "$player" "$outputfile" | sed 's/^\([0-9]\+\):.*$/\1/'`

sed -e "'${linenumber}'s/2013-08-25/test/"

我的输出是:

sed: -e expression #1, char 1: unknown command: `''

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

使用awk,它有更少的警告

linenumber=$(awk -v p="$player" '$0 ~ p { print NR }' "$outputfile")
awk -v n="$linenumber" 'NR == n { sub(/2013-08-25/,"test") }1' "$outputfile"

当然,您不需要多个步骤:

awk -v p="$player" '$0 ~ p{ sub(/2013-08-25/,"test") }1' "$outputfile"

将输出写回输入文件:

awk 'script' "$outputfile" > tmp && mv tmp "$outputfile"

上面做了与sed相同的事情,只是你指定tmp文件而不是sed为你提供一个。如果您更愿意为您做awk,那么您可以使用最近的gawk版本:

awk -i inedit 'script' "$outputfile"

无论。放弃awk的简单性和功能是不值得的,以避免创建自己的tmp文件的琐碎。

答案 1 :(得分:1)

sed中的地址不包含单引号。删除它们。此外,您应该检查$linenumber是否为单个数字(即既不是多个数字也不是空数字。)