Я хочу видалити всі порожні рядки з файлу. Навіть якщо рядок містить пробіли чи вкладки, її також слід видалити.
Я хочу видалити всі порожні рядки з файлу. Навіть якщо рядок містить пробіли чи вкладки, її також слід видалити.
Відповіді:
Тільки 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 -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
$
кінець рядка?