Я не знаю встроенного способа добиться этого, но вы можете адаптировать изящный трюк из 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
тоже ...
Чтобы применить что-то к специальным строкам в sed
, вы адресуете их, например /pattern/command
применяет command
к строкам, включая pattern
.
Если вы хотите применить команду к следующим строкам после строки шаблона, сначала переместите строку с помощью команды n
.
Затем, чтобы добавить в конец строки, используйтеs/$/whatever you want to append/
($
означает окончание строки ).
Теперь вам нужно объединить эти команды с {}
, чтобы адресация была действительна для них обоих, и для вас и выше с
sed '/General Thunderstorm Risk/{n;s/$/, 42/;}' yourfile.txt > out.txt
, чтобы добавить , 42
к строке после совпадения. Если это не то, что вы ищете, отредактируйте свой вопрос.