Заменить строку @@@ и NotApplicable и перенаправить вывод в другой файл?

С подключаемыми модулями -запускаем -в -подоболочке (, хотя у этого есть недостатки, в основном связанные с тем, должны ли подключаемые модули изменять состояние в родительском ), тогда подключаемый модуль может выдавать любые 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
0
28.11.2018, 11:19
2 ответа

Если перевести ответ Жиля на эту ситуацию, получится:

sed $'s/@@@/\t/g; s/NotApplicable/ /g' file.csv > file.xls

Здесь используются кавычки ANSI -C, что позволяет интерпретировать \tкак TAB; все остальное в кавычках — это существующая команда sed.

1
28.01.2020, 02:31

Вероятно, есть более очевидные способы сделать это, но один из способов сгенерировать любой символ в любой системе unix — с помощью tr (1):

tab=`echo t | tr t '\011'`
sed "s/NotApplicable/ /g; s/@@@/$tab/g" file.csv > file.xls

Обратите внимание на двойные кавычки вокруг команды sed.

1
28.01.2020, 02:31

Теги

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