find matching text and replace next line

前端 未结 3 1505
北恋
北恋 2020-12-02 22:01

I\'m trying to find a line in a file and replace the next line with a specific value. I tried sed, but it seems to not like the \\n. How else can this be done?

The f

相关标签:
3条回答
  • 2020-12-02 22:39

    This might work for you (GNU sed):

    sed '/<key>ConnectionString<\/key>/!b;n;c<string>changed_value</string>' file
    

    !b negates the previous address (regexp) and breaks out of any processing, ending the sed commands, n prints the current line and then reads the next into the pattern space, c changes the current line to the string following the command.

    0 讨论(0)
  • 2020-12-02 22:43

    One way: Sample file

    $ cat file
    Cygwin
    Unix
    Linux
    Solaris
    AIX
    

    Using sed, replacing the next line after the pattern 'Unix' with 'hi':

    $ sed '/Unix/{n;s/.*/hi/}' file
    Cygwin
    Unix
    hi
    Solaris
    AIX
    

    For your specific question:

    $ sed '/<key>ConnectionString<\/key>/{n;s/<string>.*<\/string>/<string>NEW STRING<\/string>/}' your_file
    <key>ConnectionString</key>
    <string>NEW STRING</string>
    
    0 讨论(0)
  • 2020-12-02 22:49

    It works. Additionaly is interested to mention that if you write,

    sed '/<key>ConnectionString<\/key>/!b;n;n;c<string>changed_value</string>' file
    

    Note the two n's, it replaces after two lines and so forth.

    0 讨论(0)
提交回复
热议问题