Мне нужно удалить пустые новые строки из текстового файла в терминале.
Файл примера
123
123
123
123
123
123
Я немного искал в Google, но единственное найденное решение было sed '/^$/d' myFile > tt
, и оно не помогает. Я все еще получил эти пустые новые строки.
Вероятно, есть 100 способов сделать это, это один:
grep -vE "$^" yourfile
Решение, которое Вы отправили, удалит пустые строки:
sed '/^$/d' myFile > output
Это не будет работать на строки, которые содержат пробелы, или твердые вкладки или любой другой вид пробела, включая возвраты каретки. Это означает, если Ваш текстовый файл произошел в Windows, то решение, вероятно, не будет работать.
На Unix строки просто разделяются с переводом строки. В Windows они разделяются с возвратом каретки и переводом строки.
Вот один способ удалить пустые строки, совместимые с текстовым форматом Windows:
sed '/^\x0D\?$/d' myFile > output
Если Вы хотите удалить строки, которые содержат только пробел, это должно работать (над Ubuntu, по крайней мере):
sed -r '/^\s*\x0D?$/d' myFile > output
Вот еще одно решение:
python -c "import sys; print ''.join(line for line in sys.stdin.readlines() if line.strip() != ''),"
(по умолчанию установлено python
)
Использование AWK: NF - встроенная переменная AWK, которая хранит количество полей в каждой записи. При использовании самостоятельно, он будет печатать только те строки, где NF! = 0.
[jaypal~/Temp]$ cat t
123
123
123
123
123
123
[jaypal~/Temp]$ awk 'NF' t
123
123
123
123
123
123
Вы можете использовать grep для этой цели.
Попробуйте: grep -v ^$ filename
.
Ваша команда также работает:
$ cat t
123
123
123
123
123
123
$ sed '/^$/d' t
123
123
123
123
123
123
$ sed '/^$/d' t >tt
$ cat tt
123
123
123
123
123
123
$
Используйте grep для пустых строк:
grep . file
Или попробуйте экс-путь (межплатформенный совместимый) для пустых строк (например, содержащий пробелы):
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