2

アプリケーションをコンパイルするときに削除したいコンテンツを含む HTML ファイルがあります。

削除する必要があるコンテンツには、接頭辞"<!-- BEGIN -->"と接尾辞が付いてい"<!-- END -->"ます。したがって、これら 2 つのタグ (およびタグを含む) の間のすべてを移動する必要があります。

<!-- BEGIN -->
Remove me
<!-- END -->

次のコマンドは、すべてのコードをコメントアウトするだけだと思います。

# remove content between comments
cat src/html/project.html                                       \
| sed -e 's/<!-- BEGIN -->/<!-- BEGIN /' \
| sed -e 's/<!-- END -->/     END -->/' \
> dist/html/project.html

この結果:

 <!-- BEGIN 
    Remove me
    END -->

コードをコメントアウトすることは私が望んでいることではありませんが、それでうまくいくと思います。ただし、この場合でも構文エラーが生成されます。

./shell: line 3: syntax error near unexpected token `|'

問題は何ですか?さらに良いことに、コード (タグを含む) を削除する方法を誰かが提案できれば、それが理想的です。

問題が明らかである場合は申し訳ありませんが、私はこのようなことの完全な初心者です。

4

3 に答える 3

4

と仮定する:

  • とコメントは常にペアになっていBEGINますEND
  • フォーマットが固​​定されていることを確認してください。<!-- (onespace) BEGIN/END (onespace) -->
  • コメントはBEGIN, END独自の行に配置されます。

これは仕事をします:

 sed '/<!-- BEGIN -->/,/<!-- END -->/d' file

例を挙げると:

kent$  cat file
<!-- BEGIN -->
Remove me

<!-- END -->
we
<!-- BEGIN -->
22Remove me
<!-- END -->
need
<!-- BEGIN -->
33Remove me
33Remove me
<!-- END -->
this
<!-- BEGIN -->
44Remove me
<!-- END -->

kent$  sed '/<!-- BEGIN -->/,/<!-- END -->/d' file
we
need
this

ファイルに保存したい場合-iは、sed のオプションを使用できます。catまた、ファイルコンテンツを渡す必要はありませんsed

于 2013-04-01T21:02:14.023 に答える