フォルダー内のすべての.mファイルに、disclaimer.txtファイルに含まれているテキストを付加したいのですが。
私は以下を試しました:
text=$(cat ./disclaimer.txt)
for f in ./*.m
do
sed -i '1i $text' $f
done
しかし、それは単に空行を追加します。
これを行うには多くの方法がありますが、ここでは簡単な最初のスタブです:
#!/bin/sh
for file in *.m; do
cat disclaimer.txt $file >> $file.$$
mv $file.$$ $file
done
免責事項と元のファイルを新しい一時ファイルに連結してから、元のファイルを一時ファイルの内容に置き換えます。
これには2つの問題があります。
sed -i '1i $text' $f
まず、変数は単一引用符内で展開されないため、sed
はリテラル文字列1i $text
を参照します。
2番目の問題は、i
コマンドが次のバックスラッシュを期待していることであり、その行は2行目に追加されるため、次のようにする必要があります。
$ text="blah"
$ sed -i $'1i\\\n'"$text"$'\n' "$file"
($'...'
展開のあるシェル、またはそれをサポートしないシェルのリテラル改行付き)
また、i
コマンドは1行しか追加できません。次の行は、追加のsedコマンドと見なされます。
GNU= sedを使用している場合、sed -i "1i $text" "$f"
だけで十分ですが、それでも1行しか表示されません。
複数行の場合、@ mjturnerが回答で示したようなものにした方がよいでしょう。