Ответ 1
$ sed 's/^ *//; s/ *$//; /^$/d' file.txt
`s/^ *//` => left trim
`s/ *$//` => right trim
`/^$/d` => remove empty line
Что было бы лучше:
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
Это может сработать для вас:
sed -r 's/^\s*(.*\S)*\s*$/\1/;/^$/d' file.txt
Аналогично, но с помощью редактора 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
Чтобы заменить рекурсивно, вы можете использовать новую функцию globbing (например, **/*.txt
).
Еще более простой метод с использованием awk.
cat filename.txt | awk 'NF' | awk '{$1=$1;print}'
awk 'NF'
- Это приведет к удалению всех пустых/пустых строк.
awk '{$1=$1;print}'
- Это приведет к удалению только пробелов пробелов (как слева, так и справа)