Используя sed, пытаемся добиться чего-то вроде ниже.
Существующий текст: значение 7
Новый текст: Значение 2
Хитрость здесь в том, что я пытаюсь заменить все файлы в каталоге с несколькими значениями (например: значение 7, значение 6, значение 27, значение 108,...) значением 2.
Вот что я уже пробовал:
sed -i 's/Value */Value 2/g' *
Но это заменяет только значение (пример: оно заменяет значение 6 на значение 26). Оно заменяет «значение» на «значение 2».
Пробовал до сих пор:
sed -i 's/Value */Value 2/g' *sed -i 's/Value '*'/Value 2/g' *
Он по-прежнему заменяет только значение, но не число. Мне нужно, чтобы все "Значение *" было заменено на "Значение 2"





Value * соответствует Value, за которым следует ноль или более пробелов. Вместо этого вы должны использовать Value [0-9]*. Нравиться:
sed -i 's/Value [0-9]*/Value 2/g' *
или вы можете поместить Value в группу захвата, чтобы не переписывать его:
sed -i 's/\(Value \)[0-9]*/\12/g' *
Нет, он делает то же самое. Единственное отличие состоит в том, что часть «Значение» сохраняется в группе захвата, а \1 в строке замены заменяется на нее.
Это может сработать для вас (GNU sed):
sed -E 's/\<(Value [^,]+, )*(Value) [^,]*/\2 2/g' file
Это заменяет список значений или одно значение одним значением глобально в строке.
Потрясающий. Оба работают, как и ожидалось. Просто нужно было уточнение. Второе решение группы захвата не перезаписывает значение, если оно уже является «значением 2». Правильно ли это понимание?