Как 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 можно использовать для этого.

2 ответа

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

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

Часть awk { found = match($0,"неопределенность") i = 4 if (found) { while ( i

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

!/ Bin/ Баш

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

!/ Bin/ Баш

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

bitSizeDir = "$ 1" value1 = "$ 2" value2 = "$ 3"

_mydir = "$ (pwd)" find $ bitSizeDir / -type f> Files; пока читаешь строку; do folder=dirname "$line" файл =basename "$line" if ["$ file" = "input.c"]; затем awk -v v1=$value1 -v v2=$value2 -f changeValues.awk $line > input.new mv input.new $ папка cd $ папка rm $ файл mv input.new input.n sed -i '' "s/$3, }/ } /g" input.c cd $_mydir fi done<Файлы rm Файлы

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

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

Это выражение означает "число, точка, число, единица". Если формат последовательный и последовательный, он заменит только "0,01" при вводе через sed.

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

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

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