Заменить все значения в одном столбце на 1

Комментарий о «зарезервированном» вызывает недоумение, потому что OSC 50 был задокументирован в управляющих последовательностях xterm с 1991 года для изменения шрифта. Вот ссылка на версию X11R5 .

Типографику на веб-странице можно улучшить. Вот небольшой совет, который поможет вам разобраться в проблеме:

Ps = 5 0 -> Установить шрифт на Pt .

Эти элементы управления можно отключить с помощью ресурса allowFontOps . Если Pt начинается с символа «#», индекс в меню шрифтов, относительный (если следующий символ - знак плюса или минуса ) или абсолютный. Ожидается число, но не обязательно после знака (по умолчанию текущая запись для относительной индексации, ноль для абсолютной индексации). То же правило (знак плюс или минус, необязательный номер) используется при запросе шрифта. Остальная часть Pt игнорируется.

Шрифт можно указать после индексного выражения "#", добавив пробел, а затем спецификатор шрифта.

Если установлен пункт меню «TrueType Fonts» (ресурс renderFont ), то этот элемент управления устанавливает / запрашивает ресурс faceName .

Скорее всего, проблема в последнем абзаце, т.е. вы использовали шрифты TrueType и (а не только любой текст ) установили для имени шрифта значение, не соответствующее шрифту. Fontconfig не имеет ... никакой полезной проверки ошибок, о которой можно говорить ... и просто "восстановит", используя шрифт по умолчанию, не беспокоясь о том, чтобы сообщить приложению, что что-то пошло не так.Если вы это сделали, вы не сможете сбросить через меню имя шрифта TrueType (очевидный выбор в меню шрифтов изменяет только размеры ). Однако управляющие последовательности по-прежнему работают.

Терминал OSX дополняет эту ситуацию отсутствием полезной документации. Но некоторые из его функций скопированы из разных мест (или могут быть скопированы в другие места). Функция изменения профиля появилась в KDE Konsole в 2008 году как часть изменений для отчета об ошибке # 155801 (любопытно цитируя довольно старую копию документа контрольных последовательностей xterm , который кто-то сделал в страница в Интернете). На самом деле 50 было в коде 2007 года (жестко запрограммировано). Но изменение в 2008 году дало ему имя и отметило, что оно противоречит xterm OSC 50 .

8
07.02.2018, 00:40
6 ответов

Строки ожидаемого вывода заканчиваются двумя пробелами и имеют поля, разделенные одной табуляцией и одним пробелом.

Если это действительно то, что вы хотите, вам понадобится:

awk -v 'OFS=\t ' '$3="1  "' < infile > outfile

Или с sed :

tab=$(printf '\t')
sed "
  s/[[:blank:]]\{1,\}/$tab /g
  s/[^[:blank:]]\{1,\}[[:blank:]]*$/1  /
  s/^[[:blank:]]*//" < infile > outfile
5
27.01.2020, 20:08

Просто с помощью GNU sed , используя -i для замены текста непосредственно в файле:

sed -i 's:\(.*\s\)\(.*\s\)\(.*\):\1\21:g' textfile

столбцы сопоставляются группами регулярных выражений в скобках, повторно используя их с \ 1 и \ 2 , а затем используя «1» для замены последней группы.

В этом случае решение, предложенное с использованием awk , также является красивым и коротким.

3
27.01.2020, 20:08
awk '{print $1, $2, "1"}' inputfile
17
27.01.2020, 20:08

try

awk

 awk '{$3=1 ; print ;}' oldfile > newfile
  • $3 = 1 установит третье поле в 1

sed (здесь GNU или busybox sed с опцией -i для редактирования на месте)

sed -i 's/[0-9.]*$/1/' file
  • [0-9.]*$ - последовательность от 0 до 9 и до конца строки.

sed (гольф 4 байта)

sed -i 's/[^ ]*$/1/' file
  • [^ ]*$ любой символ, кроме пробела, до конца строки.
12
27.01.2020, 20:08

это сделает работу:

cat textfiles | cut -d' ' -f-2 | sed 's/$/ 1/'
2
27.01.2020, 20:08
cat filename | awk -F ' ' '{$3=1; print $0}' > filename
-1
27.01.2020, 20:08

Теги

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