Этот пост объясняет, как добавить строку в начале файла из терминала. Но как мне изменить с терминала строку где-то в файле, если я не знаю, какая это строка?
Я должен изменить строку eni=10.*10**9
на eni=10.*10**8
, чтобы отметить показатели степени. Это второй раз, когда появляется eni
Я думаю, что это - то, что Вы хотите:
line=$(grep -n -m2 "eni" file | tail -n1 | cut -f1 -d:)
sed -i $line's/9$/8/' file
Так как Ubuntu теперь поставлется с GNU Awk v4.0 + (который обеспечивает inplace
модуль), Вы могли сделать что-то как
gawk -i inplace '/eni=/ {if (++c == 2) sub(/10\*\*9/,"10**8")} 1' file
Можно сделать регулярные выражения /eni=/
и/или /10\*\*9/
более или менее конкретный как требуется.
Так же в жемчуге
perl -i -pe 'if (/eni=/) {s/10\*\*9/10\*\*8/ if (++$c == 2)}' file
Используя sed:
sed -i ': 1 ; N ; $!b1 ; s/eni\=10\.\*10\*\*9/eni\=10\.\*10\*\*8/2' filename
/
один из разделителей и \
символ ESC. \
используется так, чтобы удар не интерпретировал специальные символы как некоторую команду, как *
как подстановочный знак.