QA@IT

シェルスクリプトで作業ディレクトリ配下のすべてのhtmファイルの1行目にコメントを追加したい

2683 PV

UNIX初心者です
タイトルの通りですがシェルを組み込むのは、初めての素人です。
自分のイメージとして
for文の条件にfind *.htmなどとして
ループ内でファイルに追加する処理を記述し別名で保存というイメージは掴んでいるのですが
実際にどう書けば実現できるかで止まっています。
tryエラーの繰り返しで全然進みません

for name in 'ls *.htm'; do
sed -i -e "1i comment" test/$name
done
というイメージなのですが上手く行きません。
お知恵をお貸し下さい

回答

どういう問題に遭遇するのか書かれていないので具体的な回答は無理ですが、上の例ではls *.htmで得たカレントディレクトリにあるファイル名を、testディレクトリの中から開こうとしているので、そりゃエラーになると思います。

編集 履歴 (0)
  • 回答ありがとうございます
    for name in '*.htm'; do
    sed -i -e "1i <!-- comment" $name
    done
    のようにしたところ上手くいったのですがファイルが上書き保存されてしまいます。
    別名で保存したいのですが可能なのでしょうか
    -
  • いま付いてる-iオプションが上書き保存の指定ですね。

    上書きしない場合は-iを外して、リダイレクトで出力先を指定することになるかと思います。

    for name in '*.htm'; do
    sed -e "1i <!-- comment" $name > test/$name
    done
    -
  • ご提示していただいたとおりに実行して見たところ
    一つのファイルにまとめて出力されました。
    1ファイルに付き1ファイルの変更ファイルとしたいです。
    もう少し試行錯誤してみますが、原因がわかりましたらご指導お願いします。
    -
  • ちなみに上の例は質問のサンプルコードを元にしたもので、サンプルコードと同じように事前にtestディレクトリがある必要があります。 -
  • doctypeより前にhtml形式のコメントを入れる???ドキュメント形式が決まる前に?? -
  • iオプションが使用できない環境でしたので
    リダイレクションを使用し解決致しました
    COMMENT="comment"

    for HTML in `*.htm`; do
    echo $HTML"にコメントを追加"
    touch tmpfile
    echo "$COMMENT">>tmpfile
    cat $HTML>>tmpfile
    cp tmpfile te
    -
  • touch tmpfile
    echo "$COMMENT">>tmpfile
    だと tmpfileがすでにある場合追記されてしまうのでリダイレクトは
    echo "$COMMENT">tmpfile
    の方がよいのでは。
    ケースバイケースとは思いますが。
    -
ウォッチ

この質問への回答やコメントをメールでお知らせします。