シェル、Perl、および Python スクリプトが混在する Linux フォルダー ツリーがあります。どのスクリプトも一貫したファイル拡張子 (.pl、.perl、.py、.sh、または拡張子なし) を持っていません。どのファイルが Perl スクリプトであるかを識別し、変数が 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