Это можно сделать с помощью sed
и выражения диапазона 0,/regex/s/regex/replacement/
, которое приводит к установке sed
в конце этого диапазона, когда выполняется замена, ограничивая замену первым случаем, например
sed '0,/cin >> n/s/cin >> n/\/\/ cin >> n/' file
Результат:
int main(int argc, char** argv)
{
int n;
// cin >> n;
cout << factorial(n) << endl;
if (n > 10)
{
cin >> n; // don't want it to change this one!
double d = log(n);
cout << d;
}
return 0;
}
Если у вас есть код до main
, который может включать cin >> n
, тогда вы можете использовать int main
в качестве начала диапазона, например
sed '/int main/,/cin >> n/s/cin >> n/\/\/ cin >> n/' file
Благодаря @ BenjaminW
Если вам не нравится внешний вид \/\/
, вы можете выбрать альтернативный разделитель, который будет сокращать забор. смотри, например
sed '/int main/,/cin >> n/s|cin >> n|// cin >> n|' file