замена конкретной строки в ударе

Я хотел измениться, 800 строк в одном файле говорят, что test.txt, если я использую ниже команды, она работает

sed -i '800s/old_pattern/new_pattern/' $filepath

Есть ли способ передать номер строки через переменную как ниже

sed -i '"$linenum"s/old_pattern/new_pattern/' $filepath

Я попробовал вышеупомянутое, но не работающий, помогите

0
задан 6 April 2020 в 15:44

2 ответа

$linenum не будет расширен, если это будет в одинарных кавычках - просто необходимо переместить его снаружи:

sed -i "$linenum"'s/old_pattern/new_pattern/' "$filepath"
0
ответ дан 7 April 2020 в 23:16

Вы не можете развернуть переменную в одинарные кавычки, попытаться работать без одной. Также лучше использовать ${} (переменное расширение) для расширения его в строке.

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$
0
ответ дан 7 April 2020 в 23:16

Другие вопросы по тегам:

Похожие вопросы: