Заменить блок текста на sed, awk, perl или vim

Ядро настраивает всевозможные вещи (ЦП, память, другие компоненты платформы низкого -уровня, такие как контроллеры прерываний )на ранних этапах загрузки, и соответствующие сообщения записываются на всех этапах загрузки. время. Временные метки будут нулевыми для всех сообщений до момента инициализации источника синхронизации. Таким образом, даже если в какой-то момент ранней загрузки произойдет длительная задержка, вы не увидите ее по временным меткам. Такие инструменты, как systemd-bootchart, просто визуализируют данные временных меток, так что здесь они тоже не помогут.

Вам нужно внимательно просмотреть журнал dmesg на ранних стадиях, чтобы увидеть, не происходит ли что-то не так. Если нет неправильного поведения компонента платформы, неправильной доставки прерывания или чего-то еще, задержки, возможно, могут быть вызваны такими шагами, как сбор энтропии для KASLR. Вы можете попробовать отключить это с помощью параметра загрузки nokaslrи посмотреть, поможет ли это.

0
13.03.2019, 10:05
3 ответа

Табулатура, которую вы разместили, кажется, построена из шести -длинных частей символов, -x----, где x— либо номер лада, либо тире. Вот так:

 123456123456123456
 -x-----x-----x----
|------------------|
|------------------|
|-0----------------|
|-2-----2-----2----|
|-------2----------|
|-------------0----|

Если они все с этим интервалом, вы можете просто изменить части, чтобы удалить некоторые черточки, не обращая внимания на другие строки.

$ sed -Ee 's/-(.)----/-\1/g; s/\|/-|/2' < tab
|-------| 
|-------|
|-0-----|
|-2-2-2-|
|---2---|
|-----0-|

Но если у вас в одном и том же файле записаны табуляции с разными интервалами, то это становится намного сложнее, так как нам нужно будет распознавать интервалы для каждой табуляции, а вообще это невозможно сделать даже с первого раза линия. (, так как он может быть пустым, как в вашем примере.)

Решения, которые я могу придумать для более общего случая, включают в себя расшифровку всей табулатуры и последующую ее перепечатку, что не подходит для этого ответа.


Обратите внимание, что синтаксис sed /this/,/that/обрабатывает блоки строк, где первая строка соответствует /this/, последняя строка соответствует /that/, а блок содержит все строки в между. Таким образом, /--/,/--/,/--/,...является абсурдом, поскольку существует больше шаблонов, чем просто начало и конец блока.

Чтобы сопоставить блок, похожий на табулатуру, вам нужно сопоставить |-, а затем расширить блок на шесть строк. В GNU sed для этого можно использовать /^|-/,+6.

1
28.01.2020, 02:30

Я сделал следующим способом

команда

i=`awk '{print NR}' l.txt | sort -nr | sed -n '1p'`

 for ((j=1;j<=$i;j++)); do sed -n ''$j'p' filename|awk -F "" '{gsub("","\n",$0);print $0}'|sort | uniq;done| sed '/^$/d'| sed "N;s/\n/ /g"| awk '{print $NF,$1}'| sed -r "s/ //g"

выход

x\
x\
x\
x\
x\
x\
0
28.01.2020, 02:30

В vim используйте визуальный -блочный режим, чтобы выделить столбцы для удаления с помощью

<C-v>

и ваши любимые команды перемещения(oи Oпереходят к углам блока, чтобы вы могли исправить ошибку ).

Затем введите d.

1
28.01.2020, 02:30

Теги

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