Я пытаюсь заменить строку "samples: [any number], не выполненные выборки: [any number] на строку 'OK', используя sed.

Это работает с однозначными числами. Однако мне нужен вариант для любого номера:

sed 's/samples : [0-9] failing samples : [0-9]/OK/g' ./sedTest.txt

Перед данными:

10,foo,bar,samples : 9 failing samples : 7,bar,next Item
10,foo,bar,samples : 99 failing samples : 55,bar,next Item
10,foo,bar,samples : 9229 failing samples : 5225,bar,next Item

Я пытаюсь добиться этого ..

10,foo,bar,OK,bar,next Item
10,foo,bar,OK,bar,next Item
10,foo,bar,OK,bar,next Item

1 ответ1

0

Как вы заметили, [0-9] будет соответствовать только одной цифре. Чтобы сопоставить больше цифр, необходимо добавить квантификатор. Поскольку вам нужны "одна или несколько" цифр, просто добавьте символ + после скобки. Он будет жадно совпадать со всеми символами в скобках (в этом случае любые цифры).

sed 's/samples : [0-9]+ failing samples : [0-9]+/OK/g' ./sedTest.txt

В зависимости от того, какую систему вы используете, возможно, вам нужно запустить sed с флагом -r (linux) или -E (mac). Это позволяет использовать современные символы регулярных выражений, такие как + .

В качестве альтернативы, вместо использования + используйте * . Это будет соответствовать "нулю или более" вместо "одного или более" вхождений. Преимущество здесь в том, что флаг не требуется.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .