Вот так:
$ perl -lne '/^(.*?->\s*\[)(.*)(\].*)/; $k{$_}++ for split(/,/,$2);
print "$1", join ",", keys(%k), "$3"' file
"nirmal" -> ["web:webapi","web:identity_gateway","ds:config_store","app:ticket","ds:user_store","web:loginsvc","ds:cts _store","web:loginui","web:am","ds:cts_store","app:loginui","app:am","app:identity_gateway","app:webapi","web:ticket","app:loginsvc",];
"mbl" -> ["s2:acctcomm","cws:mesg","txn:olsvc","app:loginsvc","web:b2b","app:loginui","app:optchart","app:phxcfgsvr","cws3:risk","s2core:billpay","s2:detsvc","app:spring","app:phxdshbrd","ds:user_store","web:ticket","batch:admin","at:eqsroll","s2:asset","s2core:mblsvc","txn:acct","app:am","s2:espsvc","development:mobile","web:fidoproxy","app:webapi","txn:rtmm","s2:mblsvc","app:redis","cws:user","cws3:acctaggtr","ds:cts_store","txn:detsvc","web:mobile","app:webapiagg","txb:b2bsvc","fhs:oqs","cws3:wsproxy","web:landing","web:olxml","fhs:eqs","web:prospect","s2core:ibsvc","cws:risk","web:phx","s2:ibsvc","s2core:espsvc","txn:services","web:ibxml","web:tablet","at:admin","web:identity_gateway","web:spring","web:phxdshbrd","web:phxcfgsvr","s2core:snapquotes","app:sentinel","s2core:asset","ets:ord","cws3:rtmm","web:loginui","txn:wtools","web:loginsvc","s2:snapquotes","app:fidoproxy","web:etsecxml","s2:aarcomm","web:am","web:wtxml","app:noknok","ds:config_store","app:ticket","txn:ibank2","s2core:services","s2:billpay","web:detsvc","app:landing","cws3:content","web:aempros_mpublish","s2core:aarcomm","app:mobile","web:webapiagg","s2core:detsvc","web:webapi","cws3:rtao","app:identity_gateway","web:xmlrtmm","web:xmlacct","ds:cts _store","s2:services","at:oqsroll","app:vas","app:phx","cws:ctnt",];
perl -lne
:запустить сценарий, заданный -e
, в каждой строке входного файла(-n
). -l
удаляет завершающие символы новой строки из ввода, а также добавляет новую строку к каждому вызову print
. /^(.*?->\s*\[)(.*)(\].*)/
:соответствуют трем наборам данных в каждой строке ввода. Первый, .*?->\s*\[
, — это все от начала файла до первого ->
, затем 0 или более пробельных символов и затем \[
. Поскольку шаблон находится в круглых скобках, мы можем ссылаться на него как $1
. Далее сопоставьте все до последнего]
(.*)
). Это будет $2
. И, наконец, сопоставьте оставшуюся часть строки (\].*
), это будет $3
. $k{$_}++ for split(/,/,$2);
:Это трюк для удаления дубликатов. преобразовать$2
(дублированные данные )в массив, разделив его на ,
, а затем сделать каждый элемент этого массива ключом в хеше %k
. Поскольку хэш-ключи всегда уникальны, это приведет к дедупликации данных в $2
. print "$1", join ",", keys(%k), "$3"'
:теперь мы печатаем оригинал $1
, начало строки, затем ключи хэша %k
, соединенные запятой, и, наконец, остаток строки, $3
. Это не сохранит исходный порядок ввода, но приведет к дедупликации данных. Может быть, я и сам себе ответил:
/usr/src/dwm/config.h
Из
#define MODKEY Mod1Mask
-
#define MODKEY Mod4Mask
, затем
make clean install
и перезагрузить dwm
.
Теперь я "вынужден" использовать клавишу Win вместо Alt для Meta(Mod1 )в dwm
, но в терминал (s )теперь Alt ведет себя так, как ожидалось.