2014-11-09 2 views
0

У меня возникли проблемы с работой SED.sed не заменяет некоторые пробелы

входного файла:

$ cat txt 

# nasty comment 
blah blah blah this line is invalid 
; this also isn't right 
foo = 23 # comment here 
blah=76876.8768 -- fubar 
    yoyo=76 
    tab_moo = -45.99 
// comment 
fubar = baz 
#dfgpo=sf 
#### 

Теперь, как я анализирую его:

$ cat txt | sed -r 's/(#|--|;|\/\/).*//' | grep '=' | sed -r 's/[[:blank:]]+//' 
foo= 23 
blah=76876.8768 
yoyo=76 
tab_moo = -45.99 
fubar= baz 

Цель состоит в том, чтобы удалить все комментарии и все встроенные пробелы.

Я не понимаю, почему на выходе остались некоторые пробелы. Что я делаю не так?

+0

Незначительное примечание, '-r' - это GNUism. Если вы измените его на '-E', он будет работать как для GNU, так и для версий, отличных от GNU' sed' (например, BSD, Macs и т. Д.). –

ответ

2

В sed, s/// заменяет первое появление на любой заданной строке. Вам необходимо добавить /g на конец:

sed -r 's/[[:blank:]]+//g' 
+0

Отлично. Благодарю. – MightyPork

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