С подключаемыми модулями -запускаем -в -подоболочке (, хотя у этого есть недостатки, в основном связанные с тем, должны ли подключаемые модули изменять состояние в родительском ), тогда подключаемый модуль может выдавать любые chdir
вызовы он хочет, так как это не изменит рабочий каталог родителя:
assumethisistheplugincode() {
cd /tmp
pwd
}
cd /var/tmp || exit 1
printf "before "
pwd
# and this is how we run a "plugin", in a subshell...
( assumethisistheplugincode )
printf "after "
pwd
Если перевести ответ Жиля на эту ситуацию, получится:
sed $'s/@@@/\t/g; s/NotApplicable/ /g' file.csv > file.xls
Здесь используются кавычки ANSI -C, что позволяет интерпретировать \t
как TAB; все остальное в кавычках — это существующая команда sed
.
Вероятно, есть более очевидные способы сделать это, но один из способов сгенерировать любой символ в любой системе unix — с помощью tr (1):
tab=`echo t | tr t '\011'`
sed "s/NotApplicable/ /g; s/@@@/$tab/g" file.csv > file.xls
Обратите внимание на двойные кавычки вокруг команды sed
.