С автономнымperl
:
perl -pe 's{"(.*?)"|,}{$1 // "|"}ge' < "$File" > "$Output"
(предполагается, что значения не содержат |
, "
или символов новой строки ).
Просто выполните 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
расширения с тильдой.