У меня есть список символов:
11183 11183 1 0 0 0 0 false -- "-"
Если я хочу взять все до лжи (включая) с grep
Я использую:
grep -o '[0-9].* [a-z]* '
В чем аналог sed
?
Синтаксис этого регулярного выражения в sed
идентично. Например, если Вы хотите заменить строку (строки), которая соответствует к этому регулярному выражению, можно использовать команду замены следующим образом (s/<old>/<new>/
):
$ echo '11183 11183 1 0 0 0 0 false -- "-"' | sed 's/[0-9].* [a-z]* /_THE_NEW_STRING_/'
_THE_NEW_STRING_-- "-"
Конечно, можно использовать расширенные регулярные выражения -r
, --regexp-extended
сделать Вашу жизнь легкой в некоторых случаях:
$ echo '11183 11183 1 0 0 0 0 false -- "-"' | sed -r 's/([0-9].* [a-z]* ).*/\1/'
11183 11183 1 0 0 0 0 false
$ echo '11183 11183 1 0 0 0 0 false -- "-"' | sed -r 's/([0-9].* [a-z]* )(.*)/\2 \1/'
-- "-" 11183 11183 1 0 0 0 0 false
Это sed
команда возвратит что-либо (.*
) с начала строки (^
), до и включая первое вхождение false
исключая остальных (.*$
).
sed -r 's/^(.*\<false\>).*$/\1/'