Я хочу удалить все пустые строки из файла. Даже если строка содержит пробелы или символы табуляции, ее также следует удалить.
Я хочу удалить все пустые строки из файла. Даже если строка содержит пробелы или символы табуляции, ее также следует удалить.
Ответы:
Просто 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
$конец строки?