После поиска я нашел этот вопрос , а из этот ответ :
это что-то сделано библиотеками C и остановило егоВ этом случае вы должны установить переменную awk BINMODE на 3
Я изменил ваш код на:
echo -n $'boo\r\nboo\r\n' | awk -v BINMODE=3 $'BEGIN { RS="\\n" } {gsub("boo","foo"); print}' | cat -v
И попробовал это на Unix, Linux, MacOS и Windows, все выдают этовывод:
foo^M
foo^M
Итак, -v BINMODE=3
- это то, что вы ищете.
ПРИМЕЧАНИЕ , что только -v BINMODE=3
этот переключатель и до того, как код работает.
Обычно мыможет передать переменную в awk с помощью переключателя -v
, в блоке BEGIN
, или установить его после кода перед файлами,
, но в этом случае я попробовал три способа, только -v BINMODE=3
работает.
Угадайте, что-тоделать с процессом компиляции awk
.
Пример (под cygwin
в Windows):
$ echo -n $'boo\r\nboo\r\n' | awk -v BINMODE=3 '1' | cat -v
boo^M
boo^M
$ echo -n $'boo\r\nboo\r\n' | awk 'BEGIN{BINMODE=3}1' | cat -v
boo
boo
$ echo -n $'boo\r\nboo\r\n' | awk '1' BINMODE=3 | cat -v
boo
boo
Под другими упомянутыми платформами все они выдают:
boo^M
boo^M