2012-05-25 4 views
2

У меня есть файл, как это:Не удается удалить пустые строки с SED регулярное выражение

2733617  3.00 3 3 

2733617 E1b1 8.00 8 16 
2733617 E1b1b1b 2.00 2 4 

2733617 I1 294.00 296 590 
2733617 I2 1.00 1 2 

2733617 I2a1 2.00 2 4 

sed '/^$/d' не работает для меня. Outfile выглядит так же, как и infile. Он должен удалить пустые строки.

+1

проверить, что там нет пробелов (в том числе возврат каретки) на тех, «пустые» строки: 'od -c filename' –

+0

Благодарим вас за полезную команду. Но в пустых строках есть только «\ n». – AWE

+1

'sed -n l file' покажет, что' sed' видит, как только он удалил новые строки. – potong

ответ

0

Вы также можете попробовать:

sed -n '/^./p' 

который печатает только те строки, которые имеют по крайней мере один символ в начале строки. (BTW sed '/^$/d' работает для меня)

+0

Не работает. – AWE

+0

1. Вы также можете использовать 'grep -v '^ $'' 2. Как вы используете команду 'sed'? С трубками UNIX? ('cat file | sed ...')? Может быть, вы используете стандартный вывод ошибки вместо стандартного вывода? –

+0

Греп дал мне тот же результат. Я "sed 'blahblah' file> newfile". – AWE

2

Поскольку, как представляется, неизвестно непечатные символы в «пустых» строк, вы можете повторно написать SED команду для отображения только строк с печатаемых символов в них:

sed -n '/[!-~]/p' 
3

К сожалению, в руководстве указано, что использование диапазонов, таких как [!-~], небезопасно. Однако, только печатает строки, содержащие печатаемые символы с помощью :print: работал для меня в конце концов:

sed -n '/[[:print:]]/p' 
+0

Это такой старый вопрос, о котором я не знаю, где этот таинственный файл сегодня. – AWE

1

для удаления пустых строк:

sed '/^[[:space:]]*$/d' 
+0

Гленн, извините. Я полный noob с 'sed'. Не могли бы вы объяснить мне, что делает модификатор 'd'? Я искал его без результата :) –

Смежные вопросы