Я хочу удалить все пустые строки из файла. Даже если строка содержит пробелы или символы табуляции, ее также следует удалить.
Я хочу удалить все пустые строки из файла. Даже если строка содержит пробелы или символы табуляции, ее также следует удалить.
Ответы:
Просто grep
для незаполненных:
grep '[^[:blank:]]' < file.in > file.out
[:blank:]
внутри символьного диапазона ( [...]
) называется классом символов POSIX. Есть несколько таких [:alpha:]
, как [:digit:]
... [:blank:]
соответствует горизонтальному пробелу (в локали POSIX это пробел и табуляция, но в других локалях их может быть больше, как все символы Unicode с горизонтальным интервалом в локалях UTF8), в то время как [[:space:]]
совпадает с горизонтальным и вертикальным белым пробелы (такие же, как [:blank:]
плюсы, такие как вертикальная табуляция, подача формы ...).
grep '[:blank:]'
Вернуть бы те строки , которые содержат любой из символов, :
, b
, l
, a
, n
или k
. Классы символов распознаются только внутри [...]
, а ^
внутри - [...]
отрицает множество. Так [^[:blank:]]
означает любой символ, кроме пустых.
[^[:blank:]]$
будет соответствовать только строки, которые заканчиваются непустым. Мы хотим, чтобы в любом месте
grep -E '\S'
не работал?
Как насчет:
sed -e 's/^[[:blank:]]*$//' source_file > newfile
или
sed -e '/^[[:blank:]]*$/d' source_file > newfile
т.е.
Для каждой строки подставьте:
^
")[[:blank:]]
") ноль или более раз (" *
")$
")Дополнительная информация о :: blank :: и других специальных символах на http://www.zytrax.com/tech/web/regex.htm#special
[[:space:]]
включает в себя вкладки. Если это не так, ваше регулярное выражение не будет выполнено, если после табуляции будет пробел.
wctype(3)
И isalpha(3)
страница руководства описывают то , что классы символов будут совпадать.
Вы можете использовать sed
команду для удаления пустых строк:
sed '/^$/d' in > out
Эта команда удаляет все пустые строки из файла «в»
Похоже, я нашел не так быстро, но наконец-то смешно:
| xargs -L1
Попробуйте ex -way:
ex -s +'v/\S/d' -cwq test.txt
Для нескольких файлов (редактирование на месте):
ex -s +'bufdo!v/\S/d' -cxa *.txt
Примечание: :bufdo
команда не POSIX .
Без изменения файла (просто выведите на стандартный вывод):
cat test.txt | ex -s +'v/\S/d' +%p +q! /dev/stdin
Используйте следующую команду:
grep '\S' FILE
который удаляет все строки, включая пробелы или символы табуляции.
В противном случае для удаления, не включая строки с пробелами / табуляциями, используйте:
grep . FILE
Например:
$ printf "line1\n\nline2\n \nline3\n" > FILE
$ cat -v FILE
line1
line2
line3
$ grep '\S' FILE
line1
line2
line3
$ grep . FILE
line1
line2
line3
Смотрите также:
sed
: Удалить пустые строки с помощью sedawk
: удалить пустые строки с помощью awk
$
конец строки?