sed удаляет все строки вместо одной выбранной строки

Попробуйте,

find /path/to/flac -type d -iname '*flac*' -exec mv -t /path/to/newDirectory {} +
3
17.08.2020, 13:04
1 ответ

Файл /etc/fstabстановится пустым, потому что вы используете не только -i, но и -n.

Опция -nотключает «командуp(печати )по умолчанию», которая обычно запускается в конце каждого цикла.

С -nваш скрипт действительно ничего не выводит, даже если вы удалите опцию -i, потому что в скрипте нет команды p, даже по умолчанию pв конце цикла, который напечатал бы все строки, которые не были удалены. Поскольку сценарий sedничего не выводит, указание sedвнести изменения в -вместо -iочищает файл.

Итак, чтобы решить вашу проблему, удалите -nиз своей команды.


Лично я написал бы код как

mntdir=/mnt/wsbackup

cp /etc/fstab /etc/fstab.orig
sed "\\:$mntdir:d" /etc/fstab.orig >/etc/fstab

Это позволяет нам сохранить копию исходного файла fstab.

Как вариант,

mntdir=/mnt/wsbackup

sed -i.orig "\\:$mntdir:d" /etc/fstab

что сделало бы почти то же самое,в зависимости от того, какую реализацию sedвы используете.

Оберните это в тест наgrep -q -F -e "$mntdir" /etc/fstab(аналогично тому, что вы уже сделали ), если вам нужно ничего не делать с файлом, если в нем не найдена строка $mntdir, т.е.

mntdir=/mnt/wsbackup

grep -q -F -e "$mntdir" /etc/fstab &&
sed -i.orig "\\:$mntdir:d" /etc/fstab
7
18.03.2021, 23:12

Теги

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