Как sed может использоваться для замены нескольких шаблонов в строке для различных шаблонов

Я хочу к (1) замена несколько чисел в строке для различных значений. Например, в строке "неуверенность = {0.01, 0.01}" это должно заменить строку "неуверенностью = {0.2, 0.2}". Проблема состоит в том, что (2) эти строки появляются в сотнях файлов с различными количествами чисел в скобках. Это могла быть "неуверенность = {0.1, 0.1, 0.1}", для "неуверенности = {0.3, 0.3, 0.3}" или "неуверенности = {0.1, 0.1, 0.1, 0.1, 0.1, 0.1}", для "неуверенности = {0.3, 0.3, 0.3, 0.3, 0.3, 0.3} и так далее, и я должен заменить всеми ими.

Я не видел, как sed мог использоваться, чтобы сделать это.

0
задан 13 February 2019 в 19:35

2 ответа

Используйте регулярные выражения. Преобразуйте один объект в фигурных скобках в регулярное выражение, таких как:

[0-9]\.[0-9]1

То, что означает это выражение, является "числом, период, число, один". Если формат будет последователен до конца, то это только заменит экземпляры "0,01" при проведении через sed.Terminal screenshot

Существуют другие инструменты, которые удовлетворили бы эти потребности также, такой как awk и tr, но Вы все еще использовали бы регулярные выражения для них также. Для замены чисел, таких как это оптом Вы могли заменить тот "1" другим [0-9] или a [1-3] указывать числа в диапазоне 1-3.

Поскольку больше информации о Регулярных выражениях видит Rexegg. Они значительно разворачивают полноценность фактически всех текстовых утилит управления.

0
ответ дан 26 October 2019 в 06:26

Снова большое спасибо!! Ваша подсказка помогла мне найти решение.

Я читал о awk, и это, оказалось, помогло половине моих вопросов: пройти подстроки строки, которая соответствует данной строке. Поскольку awk имеют некоторые ограничения, я использовал sed для разгребания бардак, как это, в котором v1 и v2 передаются с помощью сценария оболочки, которые называют этот код

awk часть {найденный = соответствие (0$, "неуверенность") я = 4, если (найдено) {в то время как (я <NF) {если ($i = v1) {$i = v2} я = я + 2} печать "" 0$} еще {печатает 0$}}

Часть оболочки

!/bin/bash

Проверьте, существует ли каталог уже,

!/bin/bash

Проверьте, существует ли каталог уже,

дюйм value2 =" дюйма value1 =" дюйма bitSizeDir =" за 3$ за 2$ за 1$

_mydir =" $ (pwd)" находят, что $bitSizeDir/-вводят f> Файлы; в то время как считанная строка; сделайте папку =dirname "$line" файл =basename "$line" если ["$file" = "input.c"]; затем $line-f changeValues.awk $value2-v v2= $value1 awk-v v1=> input.new mv input.new $file комнаты $folder CD $folder mv input.new input.c sed-i '' "s/3$}/}/g" input.c $ CD _mydir fi сделанный <Файлы комнаты файлов

0
ответ дан 26 October 2019 в 06:26

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

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