0

我的 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: `''

任何想法?

4

2 回答 2

1

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

于 2013-08-25T07:54:36.730 回答
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 文件的琐碎性是不值得的。

于 2013-08-25T00:54:58.967 回答