2016-02-09 4 views
2

Я знаю, как пользоваться утилитой sed в bash, и grep также хорош. Но для вывода они всегда выводят строку, содержащую шаблон.Как получить только соответствующую часть строки?

Есть ли способ в bash вырезать определенную строку, содержащую шаблон, который я хочу (используя regexp)?

+0

'Grep -o' является то, что вы ищете. – 123

ответ

2

Вот почему у вас есть --help флаг, grep --help:

-o, --only синхронизма шоу только часть согласующей линии PATTERN

Теперь вы можете

$ echo 'hello world' | grep -o hello 
hello 

Использование sed:

$ echo "hello world" | sed 's/.*\(hello\).*/\1/' 
+0

Можно ли использовать 'sed' для этого? Мне просто любопытно, а не для конкретной цели. – Chromium

+0

@Chromium См. Мое редактирование. – Maroun

+0

Является ли '\ 1' влияющим на результат? Я не вижу ничего об этом на странице руководства sed. – Chromium

1

С GNU grep вы можете использовать -o:

-o Печать только совпавшая (непустая) части согласующей линии, с каждой такой частью на отдельной строке вывода.

Пример:

$ echo ab cd ef gh | grep a 
ab cd ef gh 
$ echo ab cd ef gh | grep -o a 
a 
0

через СЭД,

$ echo 'hello world' | sed 's/\(hello\)\|./\1/g' 
hello 

$ echo 'hello world' | sed -r 's/(hello)|./\1/g' 
hello