2016-09-22 6 views
1

に追加私はDOCTYPEを持っているdoesntのどのHTM *ファイルを検索し、私はこれを使用してファイルのリストを得たHTMファイルの検索と最初の行

この特定のファイルには、このDOCTYPEを追加するための良い方法を見つけることができません。

for i in ` find . -name "*.htm*" -print`; do grep -L "DOCTYPE" $i;done; 

しかし、私はと、このリスト上で動作する方法を見つけることができませんsedの

私が試した:

for i in ` find . -name "*.htm*" -print; grep -L "DOCTYPE"`; do sed -i '1i <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">' $i; done; 

しかし、あなたではなく、独自のループを書くよりも、find-execオプションを使用して、これを行う必要があるすべてのHTM *ファイルに

おかげ

+0

あなたは 'xargs'と' exec'を探す必要があります。 – VM17

答えて

1

を行を追加します:

find . -name '*.htm?' -exec sed -i .bak '1 { /DOCTYPE/ ! i\ 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
}' {} + 

これが終わるすべてのファイルを検索します.htmに続けて任意の余分な文字を入力し、sedコマンドを実行します。 /DOCTYPE/が最初の行で一致しない場合、文字列が挿入されます。

{} +-execを使用すると、見つかったファイルごとに個別のインスタンスを実行するのではなく、sedのインスタンスの最小数が使用されることを意味します。

-iの後に引数を追加して、バックアップファイルが末尾に.bakで作成されるようにしました。

関連する問題