私の-scriptのいくつかでは、スクリプト自体が-scriptとして実行されたときにのみコンテンツが実行されるようにこの行をpython
配置しました(インポートしない、参照)。if __name__ == '__main__'
main
この説明)。
最近発見したようにsed
。
私が追加したい行は次のとおりです。
# Docs on scope of __name__ == "__main__": https://stackoverflow.com/a/419185/12298276
# -> Makes boolean "execute_in_script = True/False" obsolete
これを達成するために、すべてのスクリプトで必要な変更を自動的に適用する次のfind
--commandを設定しました。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' {} \;
'
一重引用符で囲まれた正規表現文字列の一重引用符は、次のように'\''
置き換える必要があります。
一重引用符は入れ子にできません。