Вырезать и заменить определенный столбец из списка файла

Я также запускаю Linux Mint 17,2 Cinnamon, используя тему из ppa: noobslab/themes , и я обнаружил, что после установки темы, путь вы описываете, тема отображается в Системные настройки - > Темы в окнах и Элементы управления При выборе этого параметра необходимо выполнить повторный вход в систему для правильной работы изменений, но не требуется устанавливать что-либо вручную.

Btw, я использую «средиземноморскую тему.»

-121--116284-

Я, вероятно, нашел ответ на ваш вопрос при переполнении стека . По словам Денниса Уильямсона :

Вероятно, что вы используете пейджер, такой как меньше или больше с выходной сигнал ps aux длиннее экрана. Если да, то следующее параметры вызовут (или заставят) обтекание длинных линий вместо того, чтобы быть усеченный.

ps aux | less - + S

ps aux | most -w Если используется одна из следующих команд, строки не будет упакован, но вы можете использовать клавиши со стрелками или другое движение клавиши для прокрутки влево и вправо.

ps aux | less -S # использовать клавиши со стрелками, или Esc + ( и Esc + ) , или Alt + ( и Alt + )

ps aux | большинство # используют клавиши со стрелками, или и > (также можно использовать Tab для прокрутки вправо) Линии всегда переносятся для получения дополнительных значений и стр..

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

(Примечание: это относится к не встроенной Linux, утилита ps в других вариантах Unix может работать по-разному)

-121--36990-

Поскольку ядро Linux 2,6,35, можно увеличить размер канала с помощью F _ SETPIPE _ SZ fnctl (). Непривилегированные пользователи ограничены значениями между 0 и текущим значением fs.pipe-max-size sysctl (по умолчанию 1 MiB).

Используемое значение должно быть больше 64 КиБ и иметь степень 2.

Так что вы могли бы сделать:

perl -MFcntl -e 'fcntl(STDIN, 1031, 1048576) or die $!' <> /dev/xconsole

(здесь с F_SETPIPE_SZ, жестко закодированным до его значения в моей системе, так как Linux-специфичный fcntl () не доступен для моей версии perl ).

Обратите внимание, что fcntl () не влияет на /dev/xconsole , но на буфер канала, который был создан при открытии /dev/xconsole (с помощью syslog и любого прикладной, считывающего сообщения на другом конце, так что это нужно делать при каждой загрузке после syslslog

То, что вы должны делать - это другое дело. трубы являются межпроцессным механизмом связи. Они не предназначены для хранения данных. Для записей системного журнала,64 КиБ должно быть более чем достаточно, так как это на порядки больше, чем ваша обычная запись в журнале.

Вероятнее всего, в вашем случае возникла проблема, связанная с тем, что приложение, считывающее /dev/xconsole , запущено недостаточно рано или читает недостаточно быстро.

В любом случае я бы посоветовал не изменять глобальный размер трубы по умолчанию.

Это может быть сделано путем изменения:

#define PIPE_DEF_BUFFERS        16

(выражается в количестве страниц 4 KiB) на что-то другое в include/linux/pipe _ fs _ i.h . Это не невозможно, что другие вещи должны быть изменены, чтобы отразить изменения или что это изменение повлияет на другие вещи неожиданным пути.

Если сделать его мощностью 2, которая > = 16, это будет менее вероятно нарушить ситуацию, но остерегайтесь, что это может значительно повлиять на действия глобальной системы и, в частности, на поведение планирования.

0
22.03.2018, 13:36
3 ответа
$ sed -e 's/\(.\)\(..\)\(..\)/\1.\2.\3/' -e 's/\.0/./g' file
4.17.3
1.0.2
3.0.3
4.0.2
4.0.0
2.2.3
2.2.3
3.1.0
5.0.0
5.0.0
5.0.0
5.0.0
7.7.0
7.6.0

Первая замена sedсоздает x.yy.zzиз xyyzz. Он делает это путем захвата трех групп символов в отдельных группах захвата (\(.\)и двух \(..\), где каждая точка соответствует одному символу ), а затем вставляет их снова с точками в -между ними..

Вторая замена удаляет любой нуль сразу после точки.

3
28.01.2020, 02:14

Awk раствор:

awk '{ printf "%d.%d.%d\n", substr($1,1,1), substr($1,2,3)/10, substr($1,5) }' file
  • substr(string, start [, length ])-Возвращает длинную подстрокуlength-символов -из string, начиная с номера символа start.

Выход:

4.17.3
1.0.2
3.0.3
4.0.2
4.0.0
2.2.3
2.2.3
3.1.0
5.0.0
5.0.0
5.0.0
5.0.0
7.7.0
7.6.0

Если GNU awkподдерживается, более короткий путь будет следующим:

awk -v FS="" '{ print $1, ($2$3$4)/10, $5 }' OFS='.' file
  • FS=""-Если значением является пустая строка (""), то каждый символ в записи становится отдельным полем.
4
28.01.2020, 02:14

Решение GNU sed

sed -r 's/\B(..)/.\1./; s/\.0/./g' input.txt

\B-Совпадает везде, кроме границы слова; то есть он совпадает, если символ слева и символ справа являются либо обоими символами «слова», либо обоими символами «не -слова».

Решение sedбез функций GNU

sed -r 's/(.)(..)/\1.\2./; s/\.0/./g' input.txt

Выход

4.17.3
1.0.2
3.0.3
4.0.2
4.0.0
2.2.3
2.2.3
3.1.0
5.0.0
5.0.0
5.0.0
5.0.0
7.7.0
7.6.0
0
28.01.2020, 02:14

Теги

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