我的 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: `''
任何想法?
中的地址sed
不包含单引号。删除它们。此外,您应该检查这$linenumber
是一个单一的数字(即既不是几个数字也不是空的)。
只需使用 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 文件的琐碎性是不值得的。