Используйтеpgrep
вместо фильтрации вывода из ps
. Я думаю, что в вашем случае pgrep -f '^([^ ]*/)?puma '
будет соответствовать правильному процессу, но немного поэкспериментируйте, чтобы убедиться, что вы получаете то, что хотите, и не более того.
Как только вы убедитесь, что pgrep
находит процесс, который вы хотите убить, замените pgrep
на pkill
.
Не awk или sed, а perl:
perl -C -pe 's/;(.)/;\u$1/g'
Опция -C
включает или выключает ввод-вывод UTF -8 в зависимости от переменных среды вашей локали(LC_ALL
и т. д. ); если вы хотите, чтобы ввод и вывод UTF -8 выполнялись безоговорочно, измените его на -CSD
.
Обратите внимание, что использование заглавных букв в Юникоде сложно. Это превратит ихсан в ихсан вместо правильного ихсан(турецкое имя имеет точку над i даже в верхнем регистре ).
GNU Сед:
sed 's/;[[:lower:]]/\U&/g' file
Для каждого символа нижнего регистра, следующего за точкой с запятой (;[[:lower:]]
), мы делаем его прописным с помощью\U
специальной последовательности . Флаг g
заменяет все вхождения в строке.
Если GNU Sed недоступен, совместимой с POSIX альтернативой является использование Ex .
printf '%s\n' '%s/;[[:lower:]]/\U&/g' '%p' | ex file
Замещающая команда такая же, но ко всем строкам следует обращаться с помощью %
. %p
распечатывает вывод. Если вы хотите изменить файл напрямую, замените %p
на x
.
Использование примера файла @terdon и GNUsed
:
$ sed -e 's/;\(.\)/;\U\1/g' file
John Doe;John Doe is...;He lives in...
Mike Nelson;Mike Nelson works for...;He makes...
Émilie du Châtelet;Émilie du Châtelet;Works for...;She makes...
Marcy William;Marcy's mother is...;Marcy travels a lot...
Άσπα Κυριάκου;Άσπα's brother is...; άσπα likes fish
$
с использованием Raku (, ранее известного как Perl6)
Преимущество проекта Perl6/Raku заключается в том, что он разработан для изящной обработки Unicode с нуля. Спасибо @terdon за публикацию отличного тестового файла :
.~$ raku -pe 's:g/ \;(.) /;{$0.uc}/;' terdon_uni.txt
John Doe;John Doe is...;He lives in...
Mike Nelson;Mike Nelson works for...;He makes...
Émilie du Châtelet;Émilie du Châtelet;Works for...;She makes...
Marcy William;Marcy's mother is...;Marcy travels a lot...
Άσπα Κυριάκου;Άσπα's brother is...; άσπα likes fish
Выше мы видим захват первого символа после точки с запятой. Флаг :g
(, сокращение от :global
), перемещается в начало оператора s///
, так что мы знаем из get -go, какое совпадение нам нужно. Обратите внимание на захваты в Raku start $0
, $1
, $2
и т. д. «совпадение» (левой )половины оператора s///
допустимо использование пробелов -, что улучшает читаемость. «Замена» (правой )половины оператора s///
использует {…}
для обозначения закрытия.
Ниже я использую маркер захвата <(…)>
Раку. Циркумфикс Раку <(…)>
эквивалентен флагу Perl5 \K
. Сопоставление выполнено, но маркер <(…)>
говорит Раку отбросить все снаружи <(…)>
и загрузить внутренний (захват )в $/
. Поскольку Raku выполняет полное сопоставление, но захватывает только те символы (и ), которые вы хотите изменить, написание замены значительно упрощается :
~$ raku -pe 's:g/ \; <(.)> /{$/.uc}/;' terdon_uni.txt
John Doe;John Doe is...;He lives in...
Mike Nelson;Mike Nelson works for...;He makes...
Émilie du Châtelet;Émilie du Châtelet;Works for...;She makes...
Marcy William;Marcy's mother is...;Marcy travels a lot...
Άσπα Κυριάκου;Άσπα's brother is...; άσπα likes fish
ХТН.
команда
awk -F ";" '{for(i=1;i<=NF;i++){print toupper(substr($i,1,1)) substr($i,2)}}' filename|sed -e "N;s/\n/;/g" -e "N;s/\n/;/g"
выход
John Doe;John Doe is...;He lives in...
Mike Nelson;Mike Nelson works for...;He makes...
Marcy William;Marcy's mother is...;Marcy travels a lot...