Я написал код на C++ и теперь хочу заменить число в строке с помощью сценариев оболочки.

Часть, которая должна быть заменена:

if (random<=90)

Как я могу изменить 90 из сценария оболочки?

Я написал это, но мне нужно что-то более эффективное, чем sed или с лучшим регулярным выражением, чтобы соответствовать самому числу.

for i in {1..1000..100}
do
sed -i "s/(random<=.*)/(random<=$i)/g" myfile
done

1 ответ1

1

Если вы просто хотите сопоставить число, вам нужен позитивный взгляд назад и вперед. sed не поддерживает это, но perl поддерживает.

perl -pi -e "s/(?<=\(random<=).*(?=\))/$i/g" myfile

Объяснить:

(?<=                         positive lookbehind
  \(random<=                 match a literal (random<=
)
.*                           match any character, multiple times
(?=                          positive lookeahead
  \)                         match a literal )
)

Соответствия lookbehind и lookahead не используются, поэтому вы можете заменить их на $i .

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