1

実行時に自身のディレクトリでhtml拡張子のファイルを(再帰的に)検索し、特定のタグ間のすべてのコードを別の(特定の)コンテンツで変更するbash(または他の何か)スクリプトを作成したいと思いますファイル。

これを行うのは、すべてのページをナビゲートする必要があるためですが、各ページに小さな変更あり、後で処理されるため、このスクリプトは、最初にベースを取得するのに役立ちます。その後、変更することができます。残り。

私は特に、HTMLのjavascriptまたはphpコードに置き換えるのではなく、ローカルでスクリプトを使用してこれを行うことを目指しています。

4

2 に答える 2

3

これで始められるはずです。ファイルを直接編集するので、バックアップを作成するか、--in-place一時的にスイッチを外してください。次の 4 つのファイルを作成します。

  1. 置換.sh:

    #!/bin/bash
    find -name '*.html' | while read FILE; do
            sed --in-place -f replace.sed "$FILE"
    done
    
  2. 置き換えます。

    /{{NAV}}/{
        r replacement
        d
    }
    
  3. 置換:

    <ul>
        <li>Here</li>
        <li>There</li>
    </ul>
    
  4. file.html

    <html>
    <head></head>
    <body>
        <nav>
                {{NAV}}
        </nav>
        <h1>Welcome to Whatever!</h1>
    </body>
    

実行可能にreplace.shする ( chmod a+x replace.sh)。replace.sh実行して内容を確認してテストしますfile.html

$ ./replace.sh && cat file.html
<html>
<head></head>
<body>
<nav>
<ul>
<li>Here</li>
<li>There</li>
</ul>
</nav>
<h1>Welcome to Whatever!</h1>
</body>

{{NAV}}sed スクリプトはその行の内容を消去するため、プレースホルダーは独自の行にあることが重要です。「{{NAV}}」が何らかの理由でファイルに表示される可能性がある場合は、プレースホルダーを変更する必要があります。

于 2012-09-21T04:45:19.650 に答える
2

Ben Graham の多大な助けともう少しの調査に基づいて、私が探していたものに対する答えがここにあります。

スクリプトとして機能する 1 つのファイル ( replace.sh)、置換として機能する別のファイル ( replacementFile)、および置換が適用される他の任意の数のファイルが必要です。

スクリプト。replace.sh

#!/bin/bash
find . -name "*.html" | while read FILE; do
    sed -i '' '/{{endSTRING}}/r replacementFile
    /{{startSTRING}}/,/{{endSTRING}}/d' ${FILE}
done

以上です。ただし、いくつかの追加ポイント。replacementFile最後に空の行が必要です。そうしないと、変更されたファイルの次の行に接続されます。-i ''バックアップを提供しないためにあります。必要な場合は、引用符の間に何かを配置するだけで、選択したものが追加された元のファイルがコピーされます。

于 2012-09-25T17:13:52.450 に答える