Как запустить GnuWin32 sed и файл сценария? - PullRequest
0 голосов
/ 01 марта 2019

Я использую GnuWin32 в Windows 10

Я пытаюсь запустить следующую sed однострочную оболочку с использованием оболочки Gnu Bash:

sed -f <(sed -E 's_(.+)\t(.+)_s/\1/\2/g_' C:/dictionary.txt) C:/content.txt

file substitute sed оператор преобразует словарные записи в выражения sed.main sed использует их для замены содержимого.

Это описано в Как получить доступ к словарю и заменить слова в файле?

dictionary.txtвыглядит так:

aluminium<tab>aluminum
analyse<tab>analyze
white spirit<tab>mineral spirits
stag night<tab>bachelor party
savoury<tab>savory
potato crisp<tab>potato chip
mashed potato<tab>mashed potatoes

content.txt выглядит так:

The container of white spirit was made of aluminium.
We will use an aromatic method to analyse properties of white spirit.
No one drank white spirit at stag night.
Many people think that a potato crisp is savoury, but some would rather eat mashed potato.
...
more sentences

При запуске GnuWin32 / sed в GnuBash-shell под windows 10 я получаю следующее сообщение об ошибке: syntax error near unexpected token <(s

Как переформулировать скрипт для запуска под GnuWin32 / sed под windows 10?


благодаря https://stackoverflow.com/users/2836621/mark-setchell иhttps://stackoverflow.com/users/5403468/tiw решение работает при использовании cygwin64

1 Ответ

0 голосов
/ 01 марта 2019

Один из способов - сначала записать внутренний вывод sed во временный файл, использовать его, а затем удалить его:

sed -r "s_(.+)\t(.+)_s/\1/\2/g_" C:/dictionary.txt>tmp_script.sed
sed -f tmp_script.sed C:/content.txt
del tmp_script.sed

Другой способ, основанный на комментарии г-на Марка Сетчелла, плюс небольшая настройка, с cygwin установленным ,
эта работа как для bash, так и для пакета:

sed -r "s_(.+)\t(.+)_s/\1/\2/g_" C:/dictionary.txt | sed -f /dev/stdin C:/content.txt
...