Mac и BSD sed
требуют аргумента для опции -i
.Если вам требуется, чтобы скрипт был переносимым на Linux / GNU sed
, возможно, реорганизуйте его в Perl.
sed -i '' "s/'steps': \[6\]} \],/'steps': [9]} ],/" opening*.py
В Perl:
perl -pi -e "s/'steps': \[6\]\} \],/'steps': [9]} ],/" opening*.py
Обратите внимание, как ни один из них не используется grep
- если входной файл не содержит совпадения, он не будет изменен (хотя некоторые реализации все равно будут перезаписывать файл вслепую и обновлять метку времени в процессе).
Также обратите внимание, какквадратные скобки (а в Perl - фигурные скобки) необходимо экранировать в регулярном выражении, а также то, что флаг /g
не нужен, если вы не ожидаете нескольких совпадений в одной строке.(Некоторые движки регулярных выражений прекрасно переносят неэкранированный ]
, если перед ним нет экранированного [
.)
Но гораздо лучшим решением является рефакторинг скрипта Python, чтобы вы моглиможет передавать steps
и любые другие параметры (opening
?) в качестве аргументов командной строки.
import sys
if len(sys.argv) == 1:
# Should properly print to stderr, use logging?
print('Syntax: opening.py <steps>')
exit 1
steps_param = int(sys.argv[1])
for num in range(4):
date_c = date_in
while date_c <= date_in:
lat = coordinates[num][0]
lon = coordinates[num][1]
df1 = gat.select_grib_df(
inputfile,
# indicatorOfParameter should apparently be refactored as well
{'indicatorOfParameter': 11},
[ {'coord': (lat, lon)],
'date': date_c,
'steps': [steps_param]} ],
['indicatorOfParameter', 'dataDate', 'dataTime', 'step'])