Вы можете решить эту проблему с помощью разных инструментов и разных методов. Я покажу два решения с использованием sed
и одно без него.
Решение 1
Вы хотите использовать какую-то команду в части строки.
Вы можете удалить все символы, отличные от верхнего регистра, из строки с помощью echo "${string}" | tr -cd "[:upper:]"
.
С sed s/../../e
строка, полученная в результате подстановки, передается в оболочку.
Их объединение дает вам:
sed -r 's/([^,]*)(.*)/echo "\1\$(echo "\2" | tr -cd "[:upper:]")"/e' file
Решение 2
Менее творческий, но более простой в написании - временное разделение каждой строки в две строки, а на четных строках выполнить подстановку. Соедините линии вместе и готово.
sed -e 's/,/\n/' file | sed '0~2s/[^A-Z]//g' | paste -d '' - -
Решение 3
Используя tr
из первого и paste
из второго решения, вы можете избежать sed
.
Имейте в виду, что набор символов tr
должен включать новую строку.
paste -d '' <(cut -d, -f1 file) <(cut -d, -f2 file | tr -cd ':[A-Z]:\n')
ИМХО, второе решение выглядит лучше всего. Первый работает медленно с большими файлами.