Удаление текста в файле с «sed» не работает должным образом - PullRequest
0 голосов
/ 02 мая 2019

В настоящее время я работаю над небольшим сценарием для команды "nslookup", и в ходе тестирования я столкнулся с проблемой, которую не понимаю. В моем сценарии автоматически создается файл .txt, и пользователь может ввести в него некоторый текст, если пожелает. Он также может удалить определенные строки в документе. Я попытался написать его с помощью «sed», но, похоже, он работает неправильно.

Вот меню с вывода терминала:

Domains:
1) new_domain
2) domain
3) Create new Domain
4) Delete a Domain
5) Quit
Input> 

Первые два числа, также представляющие строку каждого текста. Код для удаления домена следующий:

filename=domains.txt
old_filename=domains_backup.txt
read -p "Which domain-number shall be deleted?: " num_input
mv $filename $old_filename
sed "/$num_input/d" < $old_filename > $filename
rm $old_filename

Но при выполнении этого сценария, когда пользователь хочет удалить строку 2 (домен), текстовый файл остается прежним и не обновляется. Когда я пытаюсь сделать то же самое только с помощью терминала, все работает нормально. Я что-то упускаю?

1 Ответ

1 голос
/ 02 мая 2019

Чтобы удалить строку по номеру строки, вам нужно использовать $num_input d вместо /$num_input/d: вторая соответствует строкам, содержащим $num_input.

В качестве примечания: если вы используете GNU sed, вы можете позволить ему обработать резервную копию:

sed -i.backup "$num_input d" domains.txt

Это создаст копию нетронутого domains.txt как domains.txt.backup (или любой суффикс, указанный вами после -i) и обновит файл domains.txt.

...