在我的一些python
-scripts 中,我放置了该行,if __name__ == '__main__'
以便仅当脚本本身作为main
-script 运行时才执行内容(而不是导入,请参阅这个解释)。
正如我最近发现的那样,我想使用 . 在该行之前添加两个信息丰富的注释行sed
。
我想要添加的行是:
# Docs on scope of __name__ == "__main__": https://stackoverflow.com/a/419185/12298276
# -> Makes boolean "execute_in_script = True/False" obsolete
为了实现这一点,我设置了以下find
--sed
命令,该命令将自动在我的所有脚本中进行所需的更改python
:
find /home/andylu/Desktop/Python/Scripts/ -not -path "*.history*" -not -path '*__pycache__*' -type f -exec sed -i -Ee '/^if __name__ == '__main__':.*/i # Docs on scope of __name__ == "__main__": https://stackoverflow.com/a/419185/12298276\n# -> Makes boolean "execute_in_script = True/False" obsolete' {} \;
不幸的是,它不起作用。它似乎正在运行,因为需要大约 30 秒才能完成,但控制台中没有任何输出,脚本中也没有任何更改python
。
我必须如何更正我的sed
-string(例如/line of interest/i Lines to\nprepend before that line
)才能使其正常工作?
有关如何在前面或后面添加行的文档sed:
看这篇博文。
答案1
感谢 @steeldriver 的评论,我可以使用以下命令进行操作:
andylu@andylu-Lubuntu-PC:~/$ find /home/andylu/Desktop/Python/Scripts/ -not -path "*.history*" -not -path '*__pycache__*' -type f -exec sed -i -Ee '/^if __name__ == '\''__main__'\''/i # Docs on scope of __name__ == "__main__": https://stackoverflow.com/a/419185/12298276\n# -> Makes boolean "execute_in_script = True/False" obsolete' {} \;
必须将单引号'
正则表达式字符串中的单引号替换为'\''
as
单引号不能嵌套。