2013-08-25 3 views

ответ

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" 

выше делает то же самое СЭД делает, это просто, что вы задаете файл tmp вместо sed подходит к вам. Если вы предпочитаете использовать awk для этого, то с последними версиями gawk вы можете сделать:

awk -i inedit 'script' "$outputfile" 

Что бы ни было. Не стоит отказываться от простоты и функциональности awk, чтобы избежать тривиальности создания собственного файла tmp.

+0

Единственное, что это не написать над моим выходным файлом. мой выходной_файл: Fenlig 2013-08-25 1:21:20 Liber8or 2013-08-25 1:26:00 Когда я запустить команду он просто просто выводит все это, но не пишет .. Fenlig 2013-08-25 01:21:20 Тест Liber8or 01:26:00 Мне нужно просто отредактировать определенную дату в моем файле, поэтому я использовал sed. –

+0

Я только что обновил свой ответ, чтобы показать вам, как записать вывод обратно в ваш входной файл. –

1

Адрес в sed не содержит одинарных кавычек. Удалить их. Кроме того, вы должны проверить, что $linenumber - это одно число (т. Е. Ни одно число, ни пустое).

Смежные вопросы