Я попробовал grep -v '^ $'
в Linux, но это не сработало. Этот файл пришел из файловой системы Windows.
Попробуйте следующее:
grep -v -e '^$' foo.txt
Параметр -e
разрешает сопоставление шаблонов регулярных выражений.
Одиночные кавычки вокруг ^ $
позволяют работать с Cshell. Другие оболочки будут довольны одиночными или двойными кавычками.
ОБНОВЛЕНИЕ: это работает для меня для файла с пустыми строками или «все пробелы» (например, строки Windows с окончанием строки стиля «\ r \ n»), тогда как выше удаляются только файлы с пустыми строками и стилем unix. окончания строк:
grep -v -e '^[[:space:]]*$' foo.txt
Очень старались, но похоже, что это сработало (при условии, что \ r
кусает вас здесь)
printf "\r" | egrep -xv "[[:space:]]*"
$ dos2unix file
$ grep -v "^$" file
Или просто awk
awk 'NF' file
Если у вас нет dos2unix, то вы можете использовать инструменты вроде tr
tr -d '\r' < "$file" > t ; mv t "$file"
Я предпочитаю использовать egrep
, хотя в моем тесте с подлинным файлом с пустой строкой ваш подход работал нормально (хотя в моем тесте без кавычек). Это тоже сработало:
egrep -v "^(\r?\n)?$" filename.txt