Попробуйте эту команду:
sed -re 's/(myFunction)[[:space:]]*\([[:space:]]*("test")[[:space:]]*\)/\1(\2, false)/' SOURCE_FILENAME
Если вы предпочитаете заменить существующий исходный файл на обновленный, напишите -i SOURCE_FILENAME
вместо SOURCE_FILENAME
.
.определение шаблона для соответствия вызову функции, который вы хотите обновить:
myFunction
(очевидно) соответствует тексту myFunction
; [[:space:]]
соответствует любому символу пробела, в основном пробелам и символам табуляции. [[:space:]]*
соответствует нулю или более символов пробела. \(
и \)
соответствуют буквенным скобкам в тексте вашей программы; (
и )
- это регулярные выражения метасимволы , которые ничего не соответствуют, но ("test")
соответствует "test"
и захватывает сопоставленный текст для дальнейшего использования.
Обратите внимание, что этот шаблон захватывает две вещи, используя (
и )
.("test")
является вторым из них.
Теперь давайте рассмотрим общую структуру команды Sed 's/.../.../'
.s
означает «заменить», поэтому 's/.../.../'
- это команда Седа substitution .
Между первым и вторым слэшем идет шаблон, который мы только что обсуждали.Между вторым и третьим слешами идет текст замены, который Sed использует для замены совпадающей части любой строки текста вашей программы, которая соответствует шаблону.В тексте замены \1
и \2
являются обратными ссылками , которые помещают текст, ранее захваченный с использованием (
и )
.
Итак, вот оно.Я не только помог вам написать регулярное выражение, но и показал, как оно работает, чтобы в следующий раз вы могли написать свое собственное.