バックグラウンド
送信する前に、# TODO出力されたいくつかのpythonソースコードファイルからコメントを削除したいと考えています。git archiveさまざまな* nix OSから実行されるスクリプトからそうするつもりなので、可能な限りPOSIXに準拠する必要があります。
基本仕様に含まれていないことは承知していfind -print0ますxargs -0が、それらは十分に一般的であるように思われるため、それらを使用しても問題ありません (より良い代替手段が存在しない限り)。インプレース編集の基本仕様にないedため、使用しています。sed -i以下のコマンドが、既に untar された git アーカイブのディレクトリから実行されていると仮定します。
コメントを削除するための全体的な代替ソリューションに満足し# TODOていますが、好奇心を満足させるために、思いついたコマンドで直面している特定の問題に対する答えも欲しいです。
既存のコード
find . -type f -name "*.py" -print0 | xargs -0 -I {} ed -s {} << 'EOF'
,g/^[ \t]*#[ \t]*TODO/d
,s/[ \t]*#[ \t]*TODO//
w
EOF
期待される結果
「.py」で終わるすべてのファイルから、TODO コメントのみを含む行全体、または TODO で始まる行末コメントが削除されます。
実結果
(標準出力)
,g/^[ \t]*#[ \t]*TODO/d
,s/[ \t]*#[ \t]*TODO//
w
: No such file or directory
現在の理論
の代わりに<< 'EOF'ヒアドキュメントが適用されていると思いますが、それを修正する方法がわかりません。xargsed