sed целый поиск слова и замена

Есть два объявления add

  1. add(amount?: DurationInputArg1, unit?: DurationInputArg2): Moment;
  2. Устаревшие add(unit: unitOfTime.DurationConstructor, amount: number|string)

Когда машинопись необходимо сопоставить перегрузки, он пытается принять ближайший тип. Когда вы попытались передать units:string, самое близкое совпадение number|string - это вторая перегрузка , потому что любая строка будет соответствовать этому объявлению, т.е. 'qwe' или 'rty' типа string, но не DurationArg2, что ожидается в качестве второго параметра в первом объявлении .

Когда вы вызываете moment.add(1,'months), он будет использовать первое объявление , потому что можно привести 1 к типу первого аргумента в первой подписи, но не во второй.

Итак, чтобы исправить эту проблему и подобное, вы должны сказать, что именно хотите использовать.

Пример 1. Будет использоваться первая подпись

import * as moment from 'moment'

calculateRangeFromEnd(end: Date, unitsAmount: moment.DurationInputArg1, unitsMeasureMoment: moment.DurationInputArg2): IDateRange {
    return {
      endDate: end,
      startDate: moment(end).subtract(unitsAmount, unitsMeasureMoment).toDate()
    }
  }

Пример 2. Будет использоваться вторая подпись

import * as moment from 'moment'

calculateRangeFromEnd(end: Date, unitsAmount: number | string, unitsMeasureMoment: moment.unitOfTimes.DurationConstructor): IDateRange {
    return {
      endDate: end,
      startDate: moment(end).subtract(unitsMeasureMoment, unitsAmount).toDate()
    }
  }
107
задан fedorqui 7 August 2013 в 09:44
поделиться

4 ответа

\ b в регулярных выражениях соответствует границам слова (то есть местоположению между первым символом слова и символом, не являющимся словом) :

$ echo "bar embarassment" | sed "s/\bbar\b/no bar/g"
no bar embarassment
153
ответ дан 24 November 2019 в 03:35
поделиться

Используйте \ b для границ слов:

sed -i 's/\boldtext\b/newtext/g' <file>
12
ответ дан 24 November 2019 в 03:35
поделиться

В одной из моих машин разделение слов с помощью "\b" (без кавычек) не сработало. Решением было использовать "\<" для начального разделителя и "\>" для конечного разделителя.

Поясню на примере Joakim Lundberg:

$ echo "bar embarassment" | sed "s/\<bar\>/no bar/g"
no bar embarassment
7
ответ дан 24 November 2019 в 03:35
поделиться
$ echo "bar embarassment"|awk '{for(o=1;o<=NF;o++)if($o=="bar")$o="no bar"}1'
no bar embarassment
-1
ответ дан 24 November 2019 в 03:35
поделиться
Другие вопросы по тегам:

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