Я решил интерпретировать этот вопрос как вопрос о переносимости команд и оболочек в различных дистрибутивах Linux. «Командная строка» может означать как «команду, написанную в приглашении оболочки», так и «саму оболочку». Надеюсь, этот ответ касается обеих этих интерпретаций «командной строки».
Большинство систем Unix предоставляют одни и те же базовые утилиты для работы в командной строке. Эти утилиты работают в основном одинаково, поскольку они стандартизированы. Кроме того, синтаксис, используемый для написания команд оболочки, стандартизирован (циклы, перенаправления, конвейеры, фоновые процессы, присвоение переменных, заключение в кавычки и т. д. )Стандарт называется POSIX, и его можно найти здесь(см. Раздел «Оболочка и утилиты» ).
В большинстве систем Unix (, особенно в Linux, по какой-то причине )стандартные утилиты были расширены дополнительными функциями, но функциональные возможности, описанные стандартом POSIX , должны быть реализованы. Если стандартная утилита не соответствует стандарту POSIX, вам, вероятно, следует отправить отчет об ошибке.
В частности, сама оболочка часто расширяется, чтобы обеспечить более удобный интерактивный опыт или предоставить более продвинутые средства программирования оболочки. Оболочка, будучи таким же приложением, как и любое другое, поставляется в различных вариантах (реализациях )и bash
является наиболее популярной в системах Linux (, но она также доступна в качестве оболочки по умолчанию, например. macOS и может быть установлена на любой Unix ). Оболочки zsh
и ksh
также популярны и предоставляют различные наборы расширений, но все они должны по крайней мере быть в состоянии делать в основном то, что говорит стандарт POSIX, используя общий синтаксис (, за исключением случаев использования расширения, такие как специальные типы массивов и более причудливые формы сопоставления имен файлов с образцом и т. д., хотя некоторые из них также довольно похожи между оболочками ).
Что касается нестандартных -инструментов, таких как инструменты для выполнения некоторых конкретных задач, которые не охвачены стандартом POSIX (, таких как общение с базой данных или регулировка уровня яркости монитора ), или которые относятся к конкретному дистрибутиву Linux (, возможно, для выполнения управления пакетами ), к версии конкретного дистрибутива Linux или к конкретной аппаратной архитектуре и т. д., переносимость команды будет зависеть от правильного варианта и версия инструмента, устанавливаемого в системе, поддерживающей использование этого инструмента.
В различных дистрибутивах Linux набор доступных инструментов и утилит довольно однороден, а переносимость в целом хорошая (с той оговоркой, что инструменты для конкретных дистрибутивов и архитектур могут отличаться или отсутствовать ). При рассмотрении использования и написания сценариев, которые должны работать на других типах систем Unix, становится более важным знать, какие расширения являются специфическими для вариантов инструментов и утилит GNU/Linux, и что можно ожидать от «общего применения». Система POSIX/Unix».
Этот awk скрипт берет второе поле данных и разбивает его на переменные, которые можно использовать в математической операции:
$ cat data
'a 62-182'
'a 183-303'
'a 304-424'
$ awk '{ split($2,arr,"-");
print $0"\t"$1, arr[1] + 7133 "-" arr[2] + 7133"\047" }' data
'a 62-182' 'a 7195-7315'
'a 183-303' 'a 7316-7436'
'a 304-424' 'a 7437-7557'
awk '{gsub("-"," ",$0);print $1,$2"-"$3" "$1,$2+7133"-"$3+7133"'\''"}' filename
выход
'a 62-182' 'a 7195-7315'
'a 183-303' 'a 7316-7436'
'a 304-424' 'a 7437-7557'
Питон
#!/usr/bin/python
import re
k=open ('p','r')
for i in k:
d=i.strip().replace('-',' ').replace("'","").split(' ')
print "'"+d[0]+" "+d[1]+"-"+d[2]+"' "+"'"+d[0],str(int(d[1])+7133)+"-"+str(int(d[2])+7133)+"'"