Как отменить вывод sed?

Я читаю со строки около 500 символов. Как я могу заставить sed вместо замены этой строки чем-то заменить остальную часть строки чем-то? Короче говоря, я хочу удалить весь текст вокруг указанной строки. Удаление столбцов с помощью awk не сработает, потому что до и после совпадающей строки имеется неопределенное количество символов. Любые идеи?


person Community    schedule 11.04.2009    source источник


Ответы (1)


Попробуйте использовать обратные ссылки:

sed 's/.*\(searchstring\).*/___\1___/'

.* вокруг строки поиска будет соответствовать всему, кроме строки, а круглые скобки сообщают sed, что нужно запомнить, что соответствует. Вы можете сослаться на первую совпавшую строку с помощью \1.

Вот пример (замена всего, кроме «bar baz»):

$ echo "foo bar baz qux" | sed 's/.*\(bar baz\).*/___\1___/'
___bar baz___

Вы можете заменить «bar baz» любым узором, который вам нравится в приведенном выше; Я просто использовал базовую строку для простоты.

person Todd Gamblin    schedule 11.04.2009