.c
.h
ファイル(forおよびfiles)の先頭に著作権テキストを追加または置き換えることができるシェルスクリプト(Bash)を探しています。
スクリプトを実行する親ディレクトリにある.c
すべてのファイルの著作権テキストブロックを検索、追加、または置き換える必要があります。.h
既存の著作権テキスト:
/* --------------------------------------------------
Copyright 2014 Author name
All rights reserved
----------------------------------------------------*/
新しい著作権テキスト。
/* Copy right text bla bla bla
* some license text bla bla bla
* All rights reserved xyz xyz */
ノート
著作権テキストはファイルの先頭(
.c
および.h
)にのみ追加する必要があり、既存の著作権テキストは常にファイルの先頭にあります。親ディレクトリとサブディレクトリのすべてのファイルを検索、追加、または置き換える必要があります
.c
。.h
編集する
私が試したことは次のとおりです。
for file in `find . -type f -name "*.h"`
do
echo $file
if grep -qRin " ----------------------------------------------------------------------\*\/" $file
then
echo "Replaced License Text"
sed '1,/^ ----------------------------------------------------------------------\*\/$/d' < $file | cat licence_file - > $file.new
mv $file.new $file
else
cat licence_file $file >$file.new && mv $file.new $file
echo "Added License Test"
fi
done
License_fileには新しいライセンステキストが含まれています。
ベストアンサー1
ed
「標準テキストエディタ」です。日常の編集には適していませんが、スクリプトが簡単。
ed file.c <<'EOF'
1,/\*\//d
i
/* Copy right text bla bla bla
* some license text bla bla bla
* All rights reserved xyz xyz */
.
w
q
EOF
最初のコマンドは、最初の行からa */
(*
theと/
エスケープする必要があります)を含む最初の行まで削除します。 2番目のコマンドは単純な挿入です。 「挿入」モードにi
入るように指示しますが、コマンド自体は挿入モードを終了するように指示します。 「書き込み」を意味し、ファイルを保存することは「終了」を意味します。すべてはaで始まり終わる「ここのドキュメント」にあります(これはランダムです。必要な文字列を使用できます)。ed
.
ed
w
q
EOF
これはループで簡単に使用できます。
for f in ./*.{c,h}; do ed "$f" <<'EOF'
1,/\*\//d
i
/* Copy right text bla bla bla
* some license text bla bla bla
* All rights reserved xyz xyz */
.
w
q
EOF
done
再帰したい場合(つまり、サブディレクトリでの作業)、上記のshopt -s globstar
コマンドでおよびを使用するか、whileループを使用してください。./**/*.{c,h}
find
find . -name '*.c' -name '*.h' -print0 | while read -d '' f; do ed "$f" <<'EOF'
1,/\*\//d
i
/* Copy right text bla bla bla
* some license text bla bla bla
* All rights reserved xyz xyz */
.
w
q
EOF
done
これを何度も実行する可能性がある場合は、スクリプトに入れることをお勧めします。
#!/bin/sh
ed "$1" <<'EOF'
1,/\*\//d
i
/* Copy right text bla bla bla
* some license text bla bla bla
* All rights reserved xyz xyz */
.
w
q
EOF
名前を copyright.sh として指定し、 $PATH のどこかに置き、実行可能にすると、次のように簡単に実行できます。
shopt -s globstar
for f in ./**/*.{c,h}; do copyright.sh "$f"; done