2013-08-25 54 views
0

我行变量没有被我的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: `'' 

任何想法

回答

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文件的琐碎。

+0

唯一的问题是,这不是写在我的输出文件。 我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的原因。 –

+0

我刚刚更新了我的答案,向您展示了如何将输出写回到输入文件。 –

1

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