используйте команду:
dmesg -E
-E : включить печать сообщений на консоль
Расширение ответа Стива:
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
:Это условие (всегда верно )без действия,что означает, что действие по умолчанию печатает строку ввода. Как насчет этого awk
решения. Создает желаемый вывод в вопросе.
awk '/HBASE_MASTER_OPTS/&&x<2{gsub(/"$/," -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=2M\"");x++}1' ams-hbase-env-template.txt