У меня есть приведенный ниже сценарий, содержащий различные команды, и мне нужно изменить / заменить одну строку новым содержимым, а также добавить комментарий выше, в котором говорится, почему это изменение было сделано.
Текущий сценарий выглядит так:
some random commands
some random commands
some random commands
some random commands
some random commands
OLM_VARIABLE= = "-XYZ2048m ${OLM_VARIABLE} -XX:MaxBlahspaceSize=256m"
some random commands
some random commands
some random commands
some random commands
some random commands
Ожидаемый результат выглядит следующим образом:
Ожидаемый результат:
some random commands
some random commands
some random commands
some random commands
some random commands
##
# 2021-04-09 first comment line here
# 2021-04-09 second comment line here
##
OLM_VARIABLE = "-XYZ2048m ${OLM_VARIABLE} -XX:MaxBlahspaceSize=512m -Dxyz.updateBlahConnectTimeout=10 -Dxyz.masterUpdateTimeInterval=123456"
some random commands
some random commands
some random commands
some random commands
some random commands
Что я пробовал до сих пор:
Способ 1:
sed -i.bak $'s/OLM_VARIABLE= = "-XYZ2048m ${OLM_VARIABLE} -XX:MaxBlahspaceSize=256m"/##\\\n# 2021-04-09 first comment line here \\\n# 2021-04-09 second comment line here \\\n##\\\nOLM_VARIABLE = "-XYZ2048m ${OLM_VARIABLE} -XX:MaxBlahspaceSize=512m -Dxyz.updateBlahConnectTimeout=10 -Dxyz.masterUpdateTimeInterval=123456"/g'
Выход:
sed: -e expression #1, char 104: unknown option to `s'
Способ 2:
insert_this.txt:
##
# 2021-04-09 first comment line here
# 2021-04-09 second comment line here
##
OLM_VARIABLE = "-XYZ2048m ${OLM_VARIABLE} -XX:MaxBlahspaceSize=512m -Dxyz.updateBlahConnectTimeout=10 -Dxyz.masterUpdateTimeInterval=123456"
Я пытаюсь использовать приведенный выше файл insert_this.txt, содержащий контент, который будет использоваться для замены:
awk '/OLM_VARIABLE= = "-XYZ2048m ${OLM_VARIABLE} -XX:MaxBlahspaceSize=256m"/{system("cat insert_this.txt");next}1' file > file_new
Вывод: ничего не происходит. исходный файл остается как есть
Но ни один из них не помогает достичь того, чего я хочу. Может кто-нибудь помочь мне с этим? Заранее спасибо.





$ awk 'NR==FNR{repl = (NR>1 ? repl ORS : "") $0; next} /^OLM_VARIABLE/{$0=repl} 1' insert_this.txt file
some random commands
some random commands
some random commands
some random commands
some random commands
##
# 2021-04-09 first comment line here
# 2021-04-09 second comment line here
##
OLM_VARIABLE = "-XYZ2048m ${OLM_VARIABLE} -XX:MaxBlahspaceSize=512m -Dxyz.updateBlahConnectTimeout=10 -Dxyz.masterUpdateTimeInterval=123456"
some random commands
some random commands
some random commands
some random commands
some random commands
Когда он читает первый файл, он заполняет переменную с именем repl каждой строкой из этого файла, а когда он находит OLM_VARIABLE во втором файле, он печатает эту переменную вместо этой строки.
Большое спасибо. он работает отлично ... Не могли бы вы просто немного объяснить вышеприведенную команду awk ... Я новичок в awk ... Просто хочу понять это лучше. Заранее спасибо.