Попробуйте:
sed -e 's/\([A-Za-z]\)\1/\1/g'
Просто удалите \\\+
, тогда только удвоенные буквы сократятся до одной. (Работает при условии, что все символы были продублированы)
Попробуйте этот небольшой тест:
echo "PPaayy Atttteenttiioonn ttoo aallll ccoommmmaanndds" > test.txt
sed -e 's/\([A-z]\)\1/\1/g' < test.txt > test2.txt
cat test2.txt
Вы можете попробовать sed
и awk
для этой задачи:
cat file | sed -r 'N; s/\n/ /; s/] User logged [^ ]+//g; y/[:/ /' | awk '{s += ($4-$1)*3600 + ($5-$2)*60 + $6-$3}END {printf "%d:%02d:%02d\n", s/3600, s/60%60, s%60}'
5:06:06
sed
выстроит временные интервалы «вход» и «выход из системы» для каждого пользователя, затем awk
выполнит расчет времени для соответствующих столбцов.
Если это предусмотрено вашей системой, вы также можете попробовать комбинацию date
, с опцией-f
(ввода файла ), читающей из «подстановки процесса», чтобы получить секунды, и простой awk
суммирование:
date -f <(cut -c2-9 file1) +%s | awk '{getline X; SUM += X - $0} END {printf "%02d:%02d:%02d\n", SUM/3600, SUM/60%60, SUM%60}'
05:06:06