Прежде всего вы можете проверить ~ / .xsession -errors
для любых ошибок в i3wm. В вашем случае, вероятно, он будет такой:
/bin/sh: 1: lock: not found
Это означает, что вы определили свой псевдоним в файле конфигурации, который не был получен при запуске экземпляра i3wm.
Здесь вы можете переместить свою команду псевдонима в отдельный сценарий и изменить конфигурацию на:
bindsym Ctrl+l exec /full_path_to_script/lock
$ awk -F, -v OFS=, '{ for (i=1; i<=NF; ++i) if (split($i, a, ":") > 1) $i = a[1] OFS $i } 1' file
AAA, BBB, BBB:XXX, CCC, DDD, EEE, FFF, GGG, HHH
Вам придется перебрать все поля, и когда вы обнаружите поле, которое разбивается более чем на одну строку при разбиении на :
, вам нужно добавить первую часть этой разбивочной строки перед значением этого поле.
Если вы знаете, что это всегда будет второе поле:
$ awk -F, -v OFS=, '{ split($2, a, ":"); $2 = a[1] OFS $2 } 1' file
AAA, BBB, BBB:XXX, CCC, DDD, EEE, FFF, GGG, HHH
В вашем коде n
будет количеством строк, на которые были разбиты данные, поэтому a[n]
будет последней (самой правой):
-строкой с разделителями в $2
.
Использованиеsed
:
$ sed 's/\([^,: ]*\):/\1, &/g' file
AAA, BBB, BBB:XXX, CCC, DDD, EEE, FFF, GGG, HHH
Это заменит любую строку, не содержащую ,
, :
или пробел,и за ними сразу же следует :
с самим собой дважды (во второй раз с окончательным :
включенным ).
Удалите g
в конце команды s
, если вы собираетесь сделать только одну замену (, как в вашем примере ).
Попробуйте это:
awk -F, '{n=split($2,a,":"); a[n]} {$2=a[1]","$2}1' OFS=, file
AAA, BBB, BBB:XXX, CCC, DDD, EEE, FFF, GGG, HHH
Ваше назначение последнего поля и второго поля для $2($2=$NF","$2
)вместо назначения первого разделения в a
со вторым полем($2=a[1]","$2
)
Простой не -awk-подход
$ ( cut -f1 -d: file ; cut -f2- -d, file ) | paste -sd,
AAA, BBB, BBB:XXX, CCC, DDD, EEE, FFF, GGG, HHH
$
С одинарнымawk
:
awk -F'[:,]' '{$3=$2":"$3}1' OFS=, infile
AAA, BBB, BBB:XXX, CCC, DDD, EEE, FFF, GGG, HHH
Быстрый sed
вариант
sed -r 's/, \w+/&&/'
Выражение \w+
соответствует буквенно-цифровому (в вашем примере BBB
), но не знакам препинания или пробелам. &
представляет полное совпадение.
Пример
echo 'AAA, BBB:XXX, CCC, DDD, EEE, FFF, GGG, HHH' | sed -r 's/, \w+/&&/'
AAA, BBB, BBB:XXX, CCC, DDD, EEE, FFF, GGG, HHH