Можно ли не перезаписывать файл в случае ошибки при перенаправлении STDOUT?

Этот ответ основан на неправильном понимании вопроса, но в некоторых случаях он все равно оказывается правильным. Если ввод полностью состоит из натуральных чисел и имеет только один разделитель на -строку, (, как и в примере данных в Q. ), он работает правильно.. Он также будет обрабатывать файлы со строками, каждая из которых имеет собственный разделитель, что немного больше, чем просили.

Эта функция оболочки readиз стандартного ввода использует подстановку параметров POSIX для поиска определенного разделителя в каждой строке, (сохраненную в $d), и использует trдля замены $dс новой строкой \nи sortс данными этой строки, затем восстанавливает исходные разделители каждой строки:

sdn() { while read x; do
            d="${x#${x%%[^0-9]*}}"   d="${d%%[0-9]*}"
            x=$(echo -n "$x" | tr "$d" '\n' | sort -g | tr '\n' "$d")
            echo ${x%?}
        done ; }

Применительно к данным, приведенным в ОП:

printf "%s\n" "10 50 23 42" "10.1.200.42" "1,100,330,42" "400|500|404" | sdn

Выход:

10 23 42 50
1.10.42.200
1,42,100,330
400|404|500

0
23.01.2020, 12:41
1 ответ

Существует множество приемов, позволяющих заставить скрипты работать как в Windows, так и в Unix, см., например, этот вопрос о stackoverflow.

Пример :поставить :в начале команды unix, чтобы cmd.exeпропустить ее, и #в конце, чтобы оболочка unix не захлебывалась дополнительной кареткой -возврат:

:; echo "unix path = $PATH" > out.lst; exit #
@echo off
echo windows path = %PATH% > out.lst

Если вам нужно несколько строк, вы должны объединить здесь -документ на стороне unix с документом goto label.. : labelна стороне Windows:

:; true <<EOT
@echo off
echo windows path = %PATH% > file.txt
echo windows sux
goto skip
EOT
echo "linux path = $PATH" > file.txt #
echo linux sux #
: skip

Обратите внимание, что <<EOTдолжен быть последним в строке, и все строки в части unix должны заканчиваться #, чтобы не добавлять ложный ^Mв конец строк или имен файлов..

0
28.01.2020, 02:54

Теги

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