поиск одного или нескольких вхождений одной и той же строки и редактирование следующей строки

Я не знаю встроенного способа добиться этого, но вы можете адаптировать изящный трюк из Unix Power Tools (элемент 14.14 во второй редакции). Если вы используете bash , определите функцию, подобную этой

cd() {
    builtin cd "$1"
    PATH="$(echo $PATH | sed sX/foo/foo.foo:XXg)"
    if [ "${PWD:0:4}" = "/foo" ]; then
        export PATH="/foo/foo.foo:$PATH"
    fi
}

(я не думаю, что можно использовать вариант $ {PATH //} для замены поскольку искомый текст содержит / .)

Каждый раз, когда вы cd где-нибудь, это выполнит запрошенное изменение, а затем удалит / foo / foo. foo из пути и, наконец, проверьте, находится ли новый текущий каталог в / foo , и добавьте /foo/foo.foo к пути, если это так. Первоначально удаляя /foo/foo.foo из пути, мы избавляемся от необходимости проверять, существует ли он уже перед его добавлением.

Для завершения вам нужно переопределить pushd и popd тоже ...

2
16.04.2019, 00:04
1 ответ

Чтобы применить что-то к специальным строкам в sed, вы адресуете их, например /pattern/commandприменяет commandк строкам, включая pattern.

Если вы хотите применить команду к следующим строкам после строки шаблона, сначала переместите строку с помощью команды n.

Затем, чтобы добавить в конец строки, используйтеs/$/whatever you want to append/($означает окончание строки ).

Теперь вам нужно объединить эти команды с {}, чтобы адресация была действительна для них обоих, и для вас и выше с

sed '/General Thunderstorm Risk/{n;s/$/, 42/;}' yourfile.txt > out.txt

, чтобы добавить , 42к строке после совпадения. Если это не то, что вы ищете, отредактируйте свой вопрос.

0
27.01.2020, 22:27

Теги

Похожие вопросы