Заменить 4-е появление регулярного выражения в строке

Это результат, который у меня есть сейчас. Как я могу получить от Input to Output?

Вход:

1.2.3.4.5 2.3.4.5.6

Выход:

1.2.3.4-5 2.3.4.5-6

Бонус: I имеют другие 80% скрипта, но это мой идеальный выход.

Вход:

1.2.3.4-1.2.3.10

Выход:

1.2.3.4-10
-1
задан 19 June 2017 в 20:01

5 ответов

С awk:

awk -F '[-.]' '{printf "%s.%s.%s.%s-%s\n", $1, $2, $3, $4, $NF}'

Так как вы хотите, чтобы поля 1-4 и последнее поле были введены с помощью . или -, а выход, отформатированный с помощью все, кроме последнего поля, разделенного ..

Более кратко:

awk -F '[-.]' -v OFS=. '{$4 = $4"-"$NF; NF=4}1' Добавить последнее поле в четвертое поле и установить количество полей в 4.
1
ответ дан 18 July 2018 в 11:24

Первая часть:

$ sed 's/\./-/4' file.txt

Что заменяет четвертое вхождение . на -.

Для вашего раздела бонусов:

sed -r 's/(.*)-.*\.(.*)$/\1-\2/' file.txt

ввод:

1.2.3.4-1.2.3.10

мощность:

1.2.3.4-10
0
ответ дан 18 July 2018 в 11:24

С awk:

awk -F '[-.]' '{printf "%s.%s.%s.%s-%s\n", $1, $2, $3, $4, $NF}'

Так как вы хотите, чтобы поля 1-4 и последнее поле были введены с помощью . или -, а выход, отформатированный с помощью все, кроме последнего поля, разделенного ..

Более кратко:

awk -F '[-.]' -v OFS=. '{$4 = $4"-"$NF; NF=4}1' Добавить последнее поле в четвертое поле и установить количество полей в 4.
1
ответ дан 24 July 2018 в 19:47

Первая часть:

$ sed 's/\./-/4' file.txt

Что заменяет четвертое вхождение . на -.

Для вашего раздела бонусов:

sed -r 's/(.*)-.*\.(.*)$/\1-\2/' file.txt

ввод:

1.2.3.4-1.2.3.10

мощность:

1.2.3.4-10
0
ответ дан 24 July 2018 в 19:47

Мы можем использовать группировку с жадным совпадением с sed следующим образом:

$ sed -r 's/(.*)\.(.*)$/\1-\2/' input.txt 1.2.3.4-5 2.3.4.5-6

То же самое для perl:

$ perl -pe's/(.*)\.(.*)$/\1-\2/' input.txt 1.2.3.4-5 2.3.4.5-6

Но мы можем играть с . как разделитель столбцов в awk:

$ awk -F '.' 'BEGIN{OFS=FS}{$NF=-$NF;sub(/\.-/,"-");print}' input.txt 1.2.3.4-5 2.3.4.5-6
0
ответ дан 24 July 2018 в 19:47

Другие вопросы по тегам:

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