2014-04-14 3 views
2

Я был пользователем Perl долгое время, и в Perl'е вы можете легко удалить строки из текстовых файлов, как это:Как использовать командную строку в Ruby режим на месте-редактирования, чтобы удалить строки из текстового файла

perl -pi -e 'undef $_ if m/some-condition/' file.txt 

Я пытаюсь пошевелить сценариев для Ruby, который также делает на месте-редактирования, так что я написал это:

ruby -pi -e '$_ = nil if $_ =~ /some-condition/' file.text 

но вместо аннулировал весь файл. Затем я попробовал

ruby -pi -e 'nil if $_ =~ /some-condition/' file.text 

но это ничего не делал.

Любые идеи?

+1

Вторая форма работает для меня. Может ли ваше состояние соответствовать каждой строке? 'echo -e" a \ nb \ nc "> x; ruby -pi -e '$ _ = nil, если $ _ = ~/b /' x; cat x' печатает 'a \ nc' для меня. – Amadan

+0

+1 для @Amadan, он тоже работает для меня – mdesantis

+0

Да, возможно, что-то не так с моим регулярным выражением - теперь, когда я тестировал его снова с оригинальным выражением и исходными тестовыми данными, он работал нормально. @Amadan, если вы поместите свой комментарий в качестве ответа, я приму его. – Guss

ответ

1
ruby -pi -e '$_ = nil if $_ =~ /some-condition/' file.text 

должно быть правильно. Если он не работает, проблема заключается в some-condition. Для того, чтобы продемонстрировать,

echo -e "a\nb\nc" > x ; ruby -pi -e '$_ = nil if $_ =~ /b/' x ; cat x 

печатает

a 
c