Как добавить свойства в конце первых двух строк с двойной кавычкой?

используйте команду:

dmesg -E

-E : включить печать сообщений на консоль

3
20.08.2018, 16:30
2 ответа

Расширение ответа Стива:

awk '/HBASE_MASTER_OPTS/&&/ -XX:[+]UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=2M/{x++;print;next}/HBASE_MASTER_OPTS/&&x<2{gsub(/"$/," -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=2M\"");x++}1' ams-hbase-env-template.txt

Обновление :Это более удобная версия, в которой каждая строка встречается только один раз.

awk 'BEGIN{p="-XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=2M"}{m=0}/HBASE_MASTER_OPTS/{m=1;++x}m&&index($0,p){print;next}m&&x<=2{gsub(/"$/," " p "\"")}1' ams-hbase-env-template.txt

И пояснения:

  • В первой версии сопоставления с образцом [+]используется для литерала + символ, поскольку в противном случае +интерпретировался бы как специальный символ.

Остальные пункты относятся ко второму варианту:

  • В предложении BEGINопределена строка свойств p. Все следующие пункты применяются к строкам ввода.
  • {m=0}:Этот пункт не имеет условия, что означает, что он применяется к каждой строке, так что для каждой строки первыйm(для соответствия )будет установлен в ноль.
  • /HBASE_MASTER_OPTS/{m=1;++x}:Если строка соответствует строке HBASE_MASTER_OPTS, устанавливается mи увеличивается счетчик строк.
  • m&&index($0,p){print;next}:Это предложение проверяет, содержится ли в строке ввода помимо совпадения, указанного в m, строка свойств. В таком случае indexвернет не нулевое значение -. Если это так, мы печатаем строку как есть (, не добавляя снова свойства ), а с nextпропускаем оставшиеся предложения и начинаем обработку следующей строки. Обратите внимание, что следующие пункты были первоначально предоставлены Стивом и адаптированы только мной:
  • m&&x<=2{gsub(/"$/," " p "\"")}:Если мы достигаем этой точки, и у нас есть совпадающая строка, и наш счетчик не превышает 2, мы модифицируем$0(строку ввода ), добавляя к терминалу "пробел и нашу строку свойств. Кроме того, никакого вывода не производится, что будет сделано в следующем предложении.
  • 1:Это условие (всегда верно )без действия,что означает, что действие по умолчанию печатает строку ввода.
2
27.01.2020, 21:15

Как насчет этого awkрешения. Создает желаемый вывод в вопросе.

awk '/HBASE_MASTER_OPTS/&&x<2{gsub(/"$/," -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=2M\"");x++}1' ams-hbase-env-template.txt

Попробуйте онлайн!

3
27.01.2020, 21:15

Теги

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