В дополнение к «решению / обходному пути» Джеффа Шаллера, правильным решением, похоже, является информирование среды о копипасте, со стороны отправителя и со стороны получателя, что известно как «режим вставки в скобках».
Из https://cirw.in/blog/bracketed-paste , вот небольшой фрагмент, объясняющий немного больше:
В итоге:
- Включить вставка в квадратных скобках: printf "\ e [? 2004h"
- Дождитесь начала вставки: вы увидите \ e [200 ~ на STDIN.
- Дождитесь остановки вставки: вы увидите \ e [201 ~ на STDIN.
- Отключить вставку в скобках: printf "\ e [? 2004l"
Это еще не полностью доступно для Bash, поэтому я приму ответ Джеффа Шаллера, который мне подходит.
awk
могу сделать это за вас:
awk '{ $3 = toupper(substr($3,1,1)) substr($3,2) } $3' FS=, OFS=, file
CREDITS,EXPDATE,USER,GROUPS
99,01 jun 2018,Sylvain,team:::admin
52,01 dec 2018,Sonia,team
52,01 dec 2018,Sonia,team
25,01 jan 2019,Sonia,team
10,01 jan 2019,Sylvain,team:::admin
8,12 jun 2018,Öle,team:support
Функция substr
имеет следующий формат substr(s, a, b)
, она возвращает b символов из строки s, начиная с позиции a. Параметр b является необязательным. Он может разделить строку символов заданной длины. Здесь используется только первый символ третьего поля, функция substr
принимает начальную строку, первый базовый индекс первого символа для извлечения и количество символов для извлечения. Если этот последний аргумент отсутствует, substr
принимает все оставшиеся символы строки.
Сказав это, substr($3,1,1)
будет вычисляться до первого символа $3, а substr($3,2)
до остальных.
Чтобы удалить лишние ненужные символы, вы можете направить вывод в sed
, а затем в column
, чтобы настроить длину столбцов
awk '{ $3 = toupper(substr($3,1,1)) substr($3,2) } $3' FS=, OFS=, file | sed -e 's/,/\t/g' -e 's/:/ /g' | awk '{print $1, $2","$3","$4" "$5" " $6" " $7" "$8}' | column -t
CREDITS EXPDATE,USER,GROUPS
99 01,jun,2018 Sylvain team admin
52 01,dec,2018 Sonia team
52 01,dec,2018 Sonia team
25 01,jan,2019 Sonia team
10 01,jan,2019 Sylvain team admin
8 12,jun,2018 Öle team support
Я не думаю, что нужно много трубок, как в предложении Горо; это должно быть выполнимо в одном скрипте awk
, за которым следует column
, если это необходимо, только:
awk '
{gsub (/[ ]+/, "/", $2)
$3 = toupper(substr($3,1,1)) substr($3,2)
gsub (/,/, "\t")
gsub (/:+/, " ")
}
1
' FS=, OFS=, file
CREDITS EXPDATE USER GROUPS
99 01/jun/2018 Sylvain team admin
52 01/dec/2018 Sonia team
52 01/dec/2018 Sonia team
25 01/jan/2019 Sonia team
10 01/jan/2019 Sylvain team admin
8 12/jun/2018 öle team support