使用Sed替换包含字符串的整行

我有一个文本文件,它有一个特定的行

sometext sometext sometext TEXT_TO_BE_REPLACED sometext sometext sometext

我需要用上面的整行代替

This line is removed by the admin.

搜索关键字是TEXT_TO_BE_REPLACED

我需要为此编写一个shell脚本。 我怎样才能达到这个使用sed


您可以使用change命令替换整个行,并使用-i标志进行就地更改。 例如,使用GNU sed:

sed -i '/TEXT_TO_BE_REPLACED/cThis line is removed by the admin.' /tmp/foo

注意:在OSX上,您需要安装“brew install gnu-sed --with-default-names”以支持GNU style -i命令


您需要在前后使用通配符( .* )来替换整行:

sed 's/.*TEXT_TO_BE_REPLACED.*/This line is removed by the admin./'

接受的答案对我来说不起作用,原因如下:

  • 我的sed版本不喜欢-i的零长度扩展
  • c命令的语法很奇怪,我无法让它工作
  • 我没有意识到我的一些问题来自非斜线斜线
  • 所以这里是我想到的解决方案,我认为它应该适用于大多数情况:

    function escape_slashes {
        sed 's/////g' 
    }
    
    function change_line {
        local OLD_LINE_PATTERN=$1; shift
        local NEW_LINE=$1; shift
        local FILE=$1
    
        local NEW=$(echo "${NEW_LINE}" | escape_slashes)
        sed -i .bak '/'"${OLD_LINE_PATTERN}"'/s/.*/'"${NEW}"'/' "${FILE}"
        mv "${FILE}.bak" /tmp/
    }
    

    所以解决问题的示例用法是:

    change_line "TEXT_TO_BE_REPLACED" "This line is removed by the admin." yourFile
    
    链接地址: http://www.djcxy.com/p/47135.html

    上一篇: Replace whole line containing a string using Sed

    下一篇: Replace comma with newline in sed