以下の例のようなテキストファイルがあります。
挿入したい
<string>insert-me</string>
指定された行に。
どうすればいいですか?私は次のようなバリエーションを試しました。
sed "/s/<key>first</key>/\n <array>/\n/test/g" test.txt
「代替コマンドの無効なフラグ」エラーが発生し続けます。
ありがとう
サンプルテキストファイル:
<record>
<key>first</key>
<array>
--I want to insert the line here--
<string>hello</string>
<string>world</string>
</array>
</record>
<record>
<key>second</key>
<array>
<string>its</string>
<string>me</string>
<string>again</string>
<string>hello</string>
<string>world</string>
<string>again</string>
</array>
</record>
ベストアンサー1
これにはいくつかの質問があります(正規表現ツールを使用して構造化データを解析する一般的な質問に加えて)。
パターン(または置換)にスラッシュが含まれている場合は、sedコマンドで別の区切り文字を使用するか、スラッシュをエスケープする必要があります。
sedは(通常)線指向であるため、追加の線をパターンスペースにプルしない限り、以下を使用して線の境界を超えて一致させることはできません。
N
特定の量のスペースを一致させると、全体がより脆弱になります。
たとえば、次のようにできます。
sed '/<key>second<\/key>/ {N; s/\n[[:blank:]]*<array>/&\n\tinsert-me/;}' test.txt
または(もっと自然に)使用ㅏ代わりに歩くS代替
sed -e '/<key>second<\/key>/ {N; /<array>/ a\\tinsert-me' -e ';}' test.txt
<record>
<key>first</key>
<array>
--I want to insert the line here--
<string>hello</string>
<string>world</string>
</array>
</record>
<record>
<key>second</key>
<array>
insert-me
<string>its</string>
<string>me</string>
<string>again</string>
<string>hello</string>
<string>world</string>
<string>again</string>
</array>
</record>