我行变量没有被我的sed命令:(BASH的命令:sed -e不是让我的变量
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命令:(BASH的命令:sed -e不是让我的变量
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: `''
任何想法
?只是使用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文件的琐碎。
sed
中的地址不包含单引号。删除它们。此外,你应该检查$linenumber
是一个单一的数字(即既不是几个数字也不是空的)。
唯一的问题是,这不是写在我的输出文件。 我OUTPUTFILE: Fenlig 2013年8月25日1时21分20秒 Liber8or 2013年8月25日1时26分○○秒 当我运行命令的简单只是输出了整个事情,但不会写.. Fenlig 2013-08-25 01:21:20 Liber8or test 01:26:00 我只需要在我的文件中编辑特定日期,这就是我使用sed的原因。 –
我刚刚更新了我的答案,向您展示了如何将输出写回到输入文件。 –