sed
сделает это довольно просто, используя группы захвата и обратные ссылки со стандартной операцией s/find/replace/
. Например:
sed 's/.\(.\)\(.\)\(.\).*$/\1\3\2/' file
Где sed
использует \(stuff\)
для захвата "stuff"
с базовым синтаксисом c в части find
, а затем использует номерную обратную ссылку \1
для заново вставьте то, что было захвачено в replace
части выражения (\2
для 2-ой обратной ссылки для 2-й группы захвата и т. д.). '.'
соответствует любому отдельному символу, а '*'
- совпадение повторений для нуля или более вхождений. '$'
является якорем для конца строки.
Пример использования / Вывод
С вашими данными примера в file
вы получите:
$ sed 's/.\(.\)\(.\)\(.\).*$/\1\3\2/' file
BDC
BDC
BDC
BDC
И sed
, и другие awk
решения будут на порядка быстрее, чем порождают отдельный процесс / подоболочку для cut
каждой итерации.