Использование команды в подстановке sed

Экспорт пути go в терминал

export GOPATH=<go path from the Home dir.>
export GOPATH=$HOME/go
6
01.12.2016, 21:19
1 ответ

То, чего вы пытаетесь достичь, действительно возможно, но только с GNU sed, с помощью команды e . Так что, если вы не возражаете против возможных проблем с переносимостью, вы можете попробовать.

Например.ваш пример будет выглядеть примерно так:

>echo aaabbdd | sed -e 's/a*/echo `echo -n & | wc -m`/;e'
3bbdd

если вы удалите ; e , вы увидите промежуточную команду (которая помогает понять, почему есть два эха)

echo `echo -n aaa | wc -m`bbdd

Если вы хотите заменить несколько совпадений, это может быть более сложно, но все же может быть выполнено путем объединения замен:

>echo aabbaadd | sed -re 's/a+/`echo -n &|wc -m`/g;s/.*/echo &/;e'
2bb2dd

И, безусловно, есть более эффективные инструменты для вашей задачи, такие как awk , который имеет встроенный length () функция.

Ссылки:

P.S.

Также обратите внимание, что если ваши входные данные содержат кавычки, вам придется тщательно их избегать или временно заменить их (например, командой sed y ///), чтобы это сработало.

7
27.01.2020, 20:27

Теги

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