Когда важно записать портативные сценарии?

Обновление: адаптация ответа от Замены располагает с интервалами только промежуточные кавычки для решения этой проблемы.

Команда:

echo '123,7,11,"$343,700.14","$34,928.63","$377,000.00","$15,421.92",19,2' |
awk -F\" '{OFS="\""; for (i = 2; i < NF; i += 2) gsub(/[$,]/,"",$i); gsub(/"/,""); print}'

Вывод:

123,7,11,343700.14,34928.63,377000.00,15421.92,19,2

Первое gsub удаляет $s и ,s в двойных кавычках. Вторые удаляют сами кавычки.

Отъезд исходного ответа ниже в случае, если это помогает.

Если бы я понимаю Вас правильно, простой поиск и замена сделали бы это

echo '"$1,234,567.89"' | sed 's/[$,"]//g'

Вывод 1234567.89.

То, что это делает, - то, что это занимает место (s) символы, соответствующие ([]) $, , и " ни с чем (пустой между последними двумя /. g флаг заставляет его применяться глобально, заменяя все экземпляры (в других отношениях только первая инстанция в строке была бы заменена).

Как подать заявку, это в целый файл зависит от формата файла. Если нет ничего иного в файле, который имеет двойные кавычки, знаки доллара и запятую, это должно быть хорошо:

sed 's/[$,"]//g' /path/to/file

18
14.03.2014, 07:44
2 ответа
[119059] Как член этого сообщества я не часто вижу людей, игнорирующих башизмы для вещей, которые нацелены на башизм. Говоря о переносимости, GNUisms намного хуже башизмов. До тех пор, пока вы используете [119579]bash[119580] для своего shebang, вы можете ожидать, что сценарий будет выполнен с использованием [119581]bash[119582]. Однако, вы не можете гарантировать версию, если вы явно не проверили. Bash версия 4 принесла некоторые полезные функции, такие как ассоциативные массивы, но Bash v3 всё ещё широко используется в OS X и RHEL 5.

12:00:00
3:30:00
10:45:00
1:04:00

Какие типы скриптов должны быть максимально переносимыми?

Это больше о ваших потребностях и о том, что вы выбираете для поддержки в качестве разработчика. Если вы пишете сценарий установки для приложения, которое поддерживает все типы *NIX, то переносимость будет очень важна.

Насколько распространены системы, в которых не установлен Bash?

FreeBSD и Solaris 10 являются примерами систем, в которых по умолчанию не установлен bash. Она будет установлена в большинстве систем Linux, за исключением встраиваемых.

если в системе установлен Bash, то будет ли в ней также установлена версия GNU найти и другие утилиты?

Нет, и это реальная проблема с переносимостью. Если переносимость важна, то вы должны использовать только те возможности командной оболочки, которые определены стандартом POSIX. Утилиты GNU могут быть установлены на системы, отличные от GNU, такие как FreeBSD, но они вряд ли будут первыми в PATH, и вы не можете полагаться на эти утилиты, которые будут установлены.[119072].

15
27.01.2020, 19:46

Итак, когда важно писать переносимые скрипты?

Какие типы скриптов должны быть максимально переносимыми?

Когда вы используете их для своей рабочей среды, и вы работаете (или можете работать в будущем) на разных машинах - И вы не хотите, чтобы вам приходилось переписывать свои инструменты перед началом работы.

например: мусорный скрипт / rm замена


Марк Стюарт:

... для моего инструментария по устранению неполадок, я предполагаю, что у меня будут только оболочки vi и Korn. И я стараюсь использовать команды, которые работают на большинстве вкусов Unix.

5
27.01.2020, 19:46

Теги

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