Я хотел измениться, 800 строк в одном файле говорят, что test.txt, если я использую ниже команды, она работает
sed -i '800s/old_pattern/new_pattern/' $filepath
Есть ли способ передать номер строки через переменную как ниже
sed -i '"$linenum"s/old_pattern/new_pattern/' $filepath
Я попробовал вышеупомянутое, но не работающий, помогите
$linenum
не будет расширен, если это будет в одинарных кавычках - просто необходимо переместить его снаружи:
sed -i "$linenum"'s/old_pattern/new_pattern/' "$filepath"
Вы не можете развернуть переменную в одинарные кавычки, попытаться работать без одной. Также лучше использовать ${}
(переменное расширение) для расширения его в строке.
machine:/tmp$ cat testfile
Line No 1
Line No 2
Line No 3
Line No 4
Line No 5
Line No 6
Line No 7
Line No 8
Line No 9
Line No 10
machine:/tmp$ linenum="5"
machine:/tmp$ filename="/tmp/testfile"
machine:/tmp$ sed -i "${linenum}s/No 5/No 11/" $filename
machine:/tmp$ cat testfile
Line No 1
Line No 2
Line No 3
Line No 4
Line No 11
Line No 6
Line No 7
Line No 8
Line No 9
Line No 10
machine:/tmp$