oldboy
{
oldboy
oldgirl
}
oldboy
oldgirl
{
oldgirl
oldboy
}
oldboy
{
oldboy
oldgirl
}
oldboy
oldgirl
{
oldgirl
oldboy
}
以下用sublime text 编辑器试过可以.
//find: ({[^{]*?)(oldboy)+([^}]*?})
//replace: \1oldgirl\3
([{]\w*(oldboy)+\w*[}])
有一个难点没法解决,就是换行问题,所以提供一种迂回解决方案。
格式化内容,将{} 完整作为一行的内容,然后遍历文件的每一行,如果当前行包含花括号,则替换并回写。参考 Shell 脚本为:
格式化文件 info.txt:
oldboy
{oldboy oldgirl}
oldboy
oldgirl
{oldgirl oldboy}
Shell 脚本:
info=info.txt
touch result.txt
while read clname1
do
left=`echo $clname1 | grep {`
right=`echo $clname1 | grep }`
if [[ "$left" != "" ]] && [[ "$right" != "" ]] ; then
echo "include"
echo ${clname1//oldboy/oldgirl} >> result.txt
else
echo "not include"
echo $clname1 >> result.txt
fi
done<$info
result.txt 作为替换后的文件,逐行读取 info.txt 中的文件判断是否同时包含 {} ,再将该行中的 oldbody 替换为 oldgirl.
sed -n '/{/,/}/p' ceshi.txt |sed 's/oldboy/oldgirl/'