разделить поле номера телефона -с разными разделителями на три разных поля

Оператор

permissiveпозволяет типу bash_tработать в разрешительном режиме (вместо запуска всей системы в разрешающем режиме ). Разрешающий режим устанавливается с помощью semanage.

0
22.11.2020, 13:10
2 ответа

С GNU sed. Удалите ведущий (и замените -, )и /пробелом :

.
sed 's/^(//; y|-)/|   |' file

Выход:

031 5440 6622
021 8886 3877
555 532 2662
1
18.03.2021, 22:48

Вариант 1

Если ваши данные постоянно состоят из трех блоков цифр с любым разделителем, это должно сработать:

grep -Eo "[0-9]+" phone.txt \
  | paste -d- - - -

Это не будет работать правильно, если какой-либо телефонный номер отличается от трех блоков. Хотя это и не является одним из ваших требований, из-за того, как он работает, он также должен работать, если строка содержит несколько телефонных номеров или телефонный номер разбит на несколько строк — при условии, что каждый номер содержит ровно три блока.

Разбивка

grep -Eo "[0-9]+" phone.txt

Извлекает последовательные блоки цифр, результаты разбиваются по одному блоку на строку.

paste -d- - - -

Разверните данные так, чтобы в каждой строке отображалось 3 блока с дефисом в качестве разделителя.

Вариант 2

В качестве альтернативы, если ваши данные несколько менее последовательны:

sed -r 's/[^0-9]+/-/g;s/^-//;s/-$//' phone.txt

Разбивка

s/[^0-9]+/-/gзамените любое числовое значение, отличное от -, дефисом

s/^-//удалить начальные дефисы

s/-$//удалите дефисы в конце

1
18.03.2021, 22:48

Теги

Похожие вопросы