私はシェルとPerlとPythonスクリプトが混在したLinuxフォルダツリーを持っています。一貫したファイル拡張子(.pl、.perl、.py、.sh、または全く拡張子なし)を持つスクリプトはありません。どのファイルがPerlスクリプトであるかを特定し、その変数がPerlスクリプトにない場合は、新しいコード行を追加して変数を設定する必要があります。Bashスクリプトでperlスクリプトのみに新しいコード行を挿入するには
How to insert newline character after comma in `),(` with sed?のおかげで、このコードでは、sedを使って新しいコード行を挿入しています。
このコードは機能しますが、より効率的な方法がありますか?
#! /bin/bash
NL='
$|++'
for f in `find "$1" -type f`
do
if [ $(grep -cP "^\#\!/.+/perl" "${f}") -gt 0 ]
then
if [ $(grep -c "$|" "${f}") -eq 0 ]
then
sed -i -r "s/^#!\/(.+)\/perl(.+)$/#!\/\1\/perl\2\\${NL}/g" "${f}"
fi
fi
done
ありがとうTripleee。これは、grepが-qでファイル全体を検索しないため、はるかに高速です。なぜ私は/ gを持っていたのですか?私が何をしているのか分からなかったので:)はい、あなたの提案した選択肢を使用しました。あなたの置換は、グループ内で捕捉されたため、余分な "#!/"を追加することに注意してください。私はそれを削除した。再度、感謝します。 – tahoar
一定。気づいてくれてありがとう。 – tripleee