使用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./'
接受的答案对我来说不起作用,原因如下:
-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