В elementary OS 3.2 Freya (на основе Ubuntu 14.04) выполните:
sudo apt-get install pepperflashplugin-nonfree
sed
обычно обрабатывает файл по одной строке за раз, но если вы добавляете новые строки (или используете определенные sed
команды, которые считывают/добавляют содержимое в «пространство шаблона» ), он может содержать несколько строк в в то же время. В частности, когда ваш скрипт sed
обрабатывает строку "bb
", он сначала заменяет ее на "\nff
" (, где \n
представляет фактическую новую строку ), а затем сравнивает все пространство шаблонов с регулярное выражение ^$
обнаруживает, что оно не соответствует, и игнорирует эту команду. (Примечание :в этом контексте, ^
и $
не относятся к началу и концу строки, а относятся к началу и концу пространства шаблонов ).
Решение :Если я правильно понимаю вашу цель,второй тест должен проверять пространство шаблонов, начинающееся с новой строки (^\n
), и если да, то удалять новую строку (, а не все пространство шаблонов ). Вы можете сделать это с помощью замены s/^\n//
.
По сути, это добавит разрыв строки, если шаблон «bb» был в начале строки, но не если он находится позже в строке:
$ printf '%s\n' aa bb cc dd prefixbbsuffix | sed 's/bb/\nff/g;s/^\n//'
aa
ff
cc
dd
prefix
ffsuffix
В качестве альтернативы вы можете запустить две отдельные команды sed
, так что вторая -удаляет строки, рассматривая добавленную строку как отдельный элемент:
printf '%s\n' aa bb cc dd prefixbbsuffix | sed 's/bb/\nff/g' | sed '/^$/d'
aa
ff
cc
dd
prefix
ffsuffix
Если это не является вашей реальной целью, измените свой вопрос, чтобы уточнить его.