テキスト行を一致させた後、新しいテキスト行を挿入しますか?

テキスト行を一致させた後、新しいテキスト行を挿入しますか?

複数のHTMLファイルのフォームタグに隠しHTML入力タグを挿入する必要があります。

私の考えは、すべてのインスタンスを検索することです

<form

見つかった場合は、以下に以下を含む行を挿入します。

<input type="hidden" name="csrf_token" value="$csrf_token" /> 

この問題を解決するための最良の方法は何ですか?私は近い

sed -e '/<form/a\<input type="hidden" name="csrf_token" value="$csrf_token"/>'

答え1

それぞれの下に何かを追加するには、キャプチャされたシーケンスを維持したいことを示すために<form追加する必要があります(また、必要だと言いました)。&\n

$ find *.html | xargs sed -ie 's/<form/&\n\<input type="hidden" name="csrf_token" value="$csrf_token"\/>/g'

答え2

知っていた。実行方法は次のとおりです。

find . -name \*.html | xargs sed -i '/<form/a\<input type="hidden" name="csrf_token" value="$csrf_token" />'

答え3

これはPerlシングルライナーを使用して簡単に達成できます。

perl -i.bkp -pe 's|<form|<form\n<input type="hidden" name="csrf_token" value="$csrf_token" /> |' *.html

-i 内部編集用

.bkpはこの拡張子を持つバックアップファイルを生成します。

関連情報