IMO, использование printf
для передачи команд в ed
лучше, чем sed -i
.
printf '%s\n' 'g/,888,/d' 'w' | ed -s msalik.txt
Первый аргумент в printf
указывает ему печатать каждый оставшийся аргумент, разделенный новыми строками (\n
).
Ни один из двух последних аргументов не нуждается в кавычках. Я просто привел их в качестве примера - некоторые команды ed
нужно будет заключать в кавычки.
Почему ed
лучше, чем sed -i
?
В отличие от ed
, sed -i
не выполняет правку на месте. Он создает временный выходной файл, а затем переименовывает его поверх исходного. Это имеет два потенциально нежелательных побочных эффекта:
Разрешения на файл могут измениться из-за umask
, с которым был создан временный файл. Даже право собственности или группа могут измениться, если сценарий sed -i
будет запущен другим пользователем (который, конечно, имеет соответствующий RW-доступ к файлу и dir).
Заменяющий файл будет иметь другой inode. Это приведет к нарушению жестких ссылок.