Какой из них будет лучше:
sed -e '/^$/d' *.txt sed 'g/^$/d' -i *.txt
Кроме того, как мне удалить пробелы в начале и конце каждой строки в текстовом файле?
$ sed 's/^ *//; s/ *$//; /^$/d' file.txt `s/^ *//` => left trim `s/ *$//` => right trim `/^$/d` => remove empty line
Еще более простой метод с использованием awk.
cat filename.txt | awk 'NF' | awk '{$1=$1;print}'
awk 'NF' - это удалит все пустые / пустые строки.
awk 'NF'
awk '{$1=$1;print}' - Это удалит только конечные пробелы (как левые, так и правые)
awk '{$1=$1;print}'
Это может работать для вас:
sed -r 's/^\s*(.*\S)*\s*$/\1/;/^$/d' file.txt
Аналогично, но с использованием редактора ex:
ex
ex -s +"g/^$/de" +"%s/^\s\+//e" +"%s/\s\+$//e" -cwq foo.txt
Для нескольких файлов:
ex -s +'bufdo!g/^$/de' +'bufdo!%s/^\s\+//e' +'bufdo!%s/\s\+$//e' -cxa *.txt
Для рекурсивной замены вы можете использовать новую опцию глобализации (например, **/*.txt).
**/*.txt