Как 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 Часть оболочки bitSizeDir = "$ 1" value1 = "$ 2" value2 = "$ 3" _mydir = "$ (pwd)" find $ bitSizeDir / -type f> Files; пока читаешь строку; do
folder=!/ Bin/ Баш
Проверьте, существует ли каталог,
!/ Bin/ Баш
Проверьте, существует ли каталог,
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. Они значительно расширяют возможности практически всех утилит для работы с текстом.