От новичка до гуру: Курсы программирования на CyberDuff

строка sed, чтобы изменить окружающие двоеточия на точки в bash

Мне нужна строка регулярного выражения sed, которая изменит двоеточие на точки, окружающие переменную, например, из этого

a:b:c :d: e:f

к этому

a:b:c: .d. e:f

(переменная d). Я бесчисленное количество часов рыскал по Интернету, пытаясь найти решение... что непростая задача, когда Google игнорирует большинство знаков препинания. Я также искал несколько десятков книг по сценариям оболочки и PDF-файлов, но безрезультатно. Хотя я использовал отдельные буквы, каждая буква в этом примере может быть полной переменной, например.

cat:dog:bird :rabbit: mouse:rat

(rabbit) или даже пути:

/home/someone/bin:/home/someone/.local/bin:/usr/local/sbin :/usr/local/bin: /usr/games:/usr/local/games:/snap/bin

(/usr/local/bin). У всех примеров есть одна общая черта: переменная в середине, окруженная двоеточиями, которую нужно заменить на точку. Это вообще возможно с sed? Любая помощь приветствуется.

29.10.2017

  • у вас также есть пробелы вокруг того, что вы хотите заменить, как показано здесь? или ваше требование всегда переключаться между 3-м и 4-м двоеточием? 29.10.2017
  • Мысль: вы можете не найти в сети готовую строку sed для достижения того, что вы ищете. Вам может понадобиться (если вы еще этого не сделали) поэкспериментировать с созданием обычного выражения поиска и замены самостоятельно, чтобы достичь вашей конкретной цели. Есть несколько хороших pdf, веб-страниц и видеороликов на YouTube о том, как создавать строки поиска и замены. Если вы получите тот, который выполняет эту работу, вы можете опубликовать свое решение для других для этой конкретной проблемы распознавания образов. 29.10.2017
  • Почему :b: и :dog: не заменены? 29.10.2017

Ответы:


1

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

$ awk '{gsub(/^:|:$/,".",$2)}1' file
a:b:c .d. e:f

(если вы хотите переключать начальные и конечные двоеточия во всей строке, используйте:

$ awk '{for(i=1;i<=NF;i++)gsub(/^:|:$/,".",$i)}1' file
29.10.2017

2

То, что вы называете переменной, не совсем понятно. Если это слово (только буквенно-цифровые символы и символы подчеркивания), вы можете использовать:

sed -E 's/(^|\s):(\w+):($|\s)/\1.\2.\3/'

Но если это путь, все намного сложнее, потому что путь может содержать почти любой символ, включая пробелы... Если вам нужно регулярное выражение, которое работает для путей, вы должны рассказать нам немного больше о типах путей, которые у вас есть. .

29.10.2017

3

Если это посередине с 3 частями. вы можете использовать

sed 's/ :\([^:]*\): / .\1. /'

или если у вас есть вкладка

sed 's/\t:\([^:]*\):\t/\t.\1.\t/'

но переменная не может иметь : в нем

29.10.2017
Новые материалы

Представляем Narwhal Technologies (Nrwl)
6 декабря 2016 г. Маунтин-Вью, Калифорния С тех пор, как Виктор Савкин и я (Джефф Кросс) присоединились к команде Angular в Google на заре Angular 1, Angular продемонстрировал феноменальный..

Путь AWS  — «Изучение машинного обучения — 10 начинающих ИИ и машинного обучения на AWS».
Универсальный ресурсный центр для изучения искусственного интеллекта и машинного обучения. НОЛЬ или ГЕРОЙ, начните свое путешествие здесь. Получите решения и пройдите обучение у экспертов AWS...

5 простых концепций Python, ставших сложными
#заранее извините 1) Переменные x = 4 y = 5 Переменная в Python — это символическое представление объекта. После присвоения некоторого объекта переменной Python мы приобретаем..

«Освоение вероятности: изучение совместной, предельной, условной вероятности и теоремы Байеса —…
Виды вероятности: Совместная вероятность Предельная вероятность Условная вероятность Диаграмма Венна в вероятностях: В “Set Theory” мы создаем диаграмму Венна...

Основы Spring: Bean-компоненты, контейнер и внедрение зависимостей
Как лего может помочь нашему пониманию Когда мы начинаем использовать Spring, нам бросают много терминов, и может быть трудно понять, что они все означают. Итак, мы разберем основы и будем..

Отслеживание состояния с течением времени с дифференцированием снимков
Время от времени что-то происходит и революционизирует часть моего рабочего процесса разработки. Что-то более забавное вместо типичного утомительного и утомительного процесса разработки. В..

Я предполагаю, что вы имеете в виду методы обработки категориальных данных.
Я предполагаю, что вы имеете в виду методы обработки категориальных данных. Пожалуйста, проверьте мой пост Инструментарий специалиста по данным для кодирования категориальных переменных в..