sedを使用して、Pythonスクリプトの特定の行の前にコメントとURLを含む2行を追加します。

sedを使用して、Pythonスクリプトの特定の行の前にコメントとURLを含む2行を追加します。

私の-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を設定しました。sedpython

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' {} \;

'一重引用符で囲まれた正規表現文字列の一重引用符は、次のように'\''置き換える必要があります。

一重引用符は入れ子にできません。

関連情報