Как заставить команду «найти» перейти к нужной позиции и выполнить поиск?

С автономнымperl:

perl -pe 's{"(.*?)"|,}{$1 // "|"}ge' < "$File" > "$Output"

(предполагается, что значения не содержат |, "или символов новой строки ).

0
27.06.2021, 11:58
1 ответ

Просто выполните cdи findв подоболочке:

(cd 'PATH/TO/HEADER/FILE' && find../../..)

Таким образом, затрагивается только текущий рабочий каталог подоболочки.

Вы можете сделать это функцией или скриптом, используя здесь GNUrealpath:

findfrom() (
  dir=${1?}; shift
  reldir=$(realpath --relative-to="$dir".) || exit
  cd -- "$dir" && find "$reldir" "$@"
)

Последние версии GNU envтакже имеют опцию -C/--chdirдля изменения рабочего каталога перед выполнением команды:

env -C PATH/TO/HEADER/FILE find../../..

Также обратите внимание, что вы всегда можете выполнить cd -, чтобы вернуться в каталог, в котором вы находились до последнего успешного cd.

csh -как и Korn -как оболочки также поддерживают стек рабочего каталога, которым вы управляете с помощью pushdи popdвместо cd. В zshвы можете указать cdавтоматически использовать этот стек с помощью опции autopushdи перемещаться по этому стеку с помощью cd +2, cd -2... или обращаться к нему с помощью массива $dirstackили ~2, ~+2, ~-2расширения с тильдой.

0
28.07.2021, 11:22

Теги

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