sedを使用して「/>」を検索する方法

sedを使用して「/>」を検索する方法

/>私の必要性は、ディレクトリ内のすべてのファイルの最初の文字列の後に新しい文字列を追加することです。

これは私のスクリプトです。

#!/bin/bash

find ./ -type f -print0 | while IFS= read -r -d '' myfile; do
    sed -i '0,/\/>/asome text here' $myfile
done

しかし、すべて\n一致するようです。たとえば、ファイルが次のような場合:

abc
def
<abc/>
<abc/>

スクリプトを実行すると、次のような結果が得られます。

abc
some text here
def
some text here
<abc/>
some text here
<abc/>

最初の項目に新しい文字列を追加します/>が、最初の行の前の各行に新しい文字列も追加します/>

答え1

はい。この式を使用する0,/regex/と、次のコマンド()が次にa適用されます。すべてのライン正規表現の最初の一致まで(および含む)。

私の考えでは、あなたがしたいと思います。

sed -i '0,/regex/{//a text
}' "$myfile"

これにより、正規表現が最初に一致する前のすべての行が選択され、その範囲内の式と一致する行にのみコマンドが適用され、他のすべての行は変更されずに渡されます。

追加するテキストの終わりを示すには、リテラル改行が必要です。

関連情報