Как сказал Адафон, вы просто посмотрели не на ту строку. Все остальное должно быть в порядке.
Вы хотите различать по классам, поэтому давайте посмотрим на ваш xprop:
WM_CLASS(STRING) = "keepassx", "Keepassx"
Эта строка определяется как:
WM_CLASS(STRING) = instance, class
Как видите, вы хотели плавающий keepassx
, но класс - Keepassx
Есть два решения:
Используйте for_window [class="Keepassx"] floating enable
, так как это ссылается на правильное имя класса.
Используйте for_window [class="(?i)keepassx"] floating enable
, что означает, что искомая строка будет чувствительна к регистру без учета регистра.
Имейте в виду, что вы также можете использовать for_window
с другими атрибутами, такими как name
, instance
и т.д.
EDIT: Я снова прочитал его комментарий, и да, он должен быть прав: после этой строки идет другая, которая может отключить плавающий режим для определенных или всех окон.
Если вам действительно нужно изменить позицию определенного символа в awk
, тогда вы можете установить пустое поле разделитель полей:
awk 'BEGIN{FS=""; OFS=FS} {$23 = int(FNR / 58) + 1 ; print}' file
OTOH, если вы действительно хотите изменить пятое разделенное пробелами поле , вы можете просто использовать разделитель по умолчанию
awk '{$5 = int(FNR / 58) + 1 ; print}' file
perl -lpe 's/^.{22}\K0/$. % 58 ? $a||0 : $a++/e' yourfile
Пропустите первые 22 символа и оставьте их в стороне от появления в сопоставлении из-за \K
, а 23-й символ наверняка является 0
согласно вашей спецификации.
Номер строки $. % 58
сообщит нам, нужно ли нам удерживать счетчик или увеличивать его.
Чтобы заменить только 0 в 23-й колонке (или в вашем примере 5-й колонке), вам нужно что-то вроде этого:
sed -e "s/^\(\(\S\S*\s\s*\)\{4\}\)0 /\1$i/" file.txt > newfile.txt
Но это замечание просто для улучшения ваших знаний sed. Замена с увеличением переменных не является типичной работой sed. Это возможно, но не практично. Вы можете смешать sed со сценарием оболочки, но, возможно, вам лучше использовать язык сценариев по вашему выбору, такой как python или perl.