Как вставить строку в текстовый файл в обозначенном месте, используя SED + Regex?

Если вам нужно установить исправления в реальном времени, вы можете попробовать ядра Linux 4.x из http://backports.debian.org/ . Однако вам, вероятно, потребуется создать живые исправления самостоятельно или использовать сторонние исправления.

Backport-пакеты обычно берутся из Debian тестирования и повторно компилируются для текущей стабильной (jessie).

1
02.06.2018, 18:48
1 ответ

Hay varios problemas aquí (más allá del general de tratar de analizar datos estructurados con herramientas de expresiones regulares)

  1. si su patrón (o reemplazo )contiene barras, entonces necesita usar un separador diferente para los comandos sed o escapar de las barras

  2. sed está (normalmente )orientado a líneas -, por lo que no puede hacer coincidir los límites de las líneas a menos que introduzca líneas adicionales en el espacio del patrón conN

  3. hacer coincidir cantidades específicas de espacios en blanco hará que todo sea aún más frágil

Entonces, por ejemplo, podrías hacer:

sed '/<key>second<\/key>/ {N; s/\n[[:blank:]]*<array>/&\n\tinsert-me/;}' test.txt

o (más naturalmente )usando un añadido en lugar de s sustituto

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>
2
27.01.2020, 23:32

Теги

Похожие вопросы