Replace whole line when match found with sed

前端 未结 4 1769
佛祖请我去吃肉
佛祖请我去吃肉 2020-12-07 20:25

I need to replace the whole line with sed if it matches a pattern. For example if the line is \'one two six three four\' and if \'six\' is there, then the whole

4条回答
  •  庸人自扰
    2020-12-07 20:55

    You can do it with either of these:

    sed 's/.*six.*/fault/' file     # check all lines
    sed '/six/s/.*/fault/' file     # matched lines -> then remove
    

    It gets the full line containing six and replaces it with fault.

    Example:

    $ cat file
    six
    asdf
    one two six
    one isix
    boo
    $ sed 's/.*six.*/fault/'  file
    fault
    asdf
    fault
    fault
    boo
    

    It is based on this solution to Replace whole line containing a string using Sed

    More generally, you can use an expression sed '/match/s/.*/replacement/' file. This will perform the sed 's/match/replacement/' expression in those lines containing match. In your case this would be:

    sed '/six/s/.*/fault/' file
    

    What if we have 'one two six eight eleven three four' and we want to include 'eight' and 'eleven' as our "bad" words?

    In this case we can use the -e for multiple conditions:

    sed -e 's/.*six.*/fault/' -e 's/.*eight.*/fault/' file
    

    and so on.

    Or also:

    sed '/eight/s/.*/XXXXX/; /eleven/s/.*/XXXX/' file
    

提交回复
热议问题