Как программно удалить пустые символы новой строки из файла?

Мне нужно удалить пустые новые строки из текстового файла в терминале.

Файл примера

123
123
123
123

123



123

Я немного искал в Google, но единственное найденное решение было sed '/^$/d' myFile > tt, и оно не помогает. Я все еще получил эти пустые новые строки.

2
задан 9 November 2011 в 16:43

6 ответов

Вероятно, есть 100 способов сделать это, это один:

grep -vE "$^" yourfile
0
ответ дан 9 November 2011 в 16:43

Решение, которое Вы отправили, удалит пустые строки:

sed '/^$/d' myFile > output

Это не будет работать на строки, которые содержат пробелы, или твердые вкладки или любой другой вид пробела, включая возвраты каретки. Это означает, если Ваш текстовый файл произошел в Windows, то решение, вероятно, не будет работать.

На Unix строки просто разделяются с переводом строки. В Windows они разделяются с возвратом каретки и переводом строки.

Вот один способ удалить пустые строки, совместимые с текстовым форматом Windows:

sed '/^\x0D\?$/d' myFile > output

Если Вы хотите удалить строки, которые содержат только пробел, это должно работать (над Ubuntu, по крайней мере):

sed -r '/^\s*\x0D?$/d' myFile > output
1
ответ дан 9 November 2011 в 16:43

Вот еще одно решение:

python -c "import sys; print ''.join(line for line in sys.stdin.readlines() if line.strip() != ''),"

(по умолчанию установлено python)

0
ответ дан 9 November 2011 в 16:43

Использование 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
0
ответ дан 9 November 2011 в 16:43

Вы можете использовать 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
$
0
ответ дан 9 November 2011 в 16:43

Используйте 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
1
ответ дан 9 November 2011 в 16:43

Другие вопросы по тегам:

Похожие вопросы: