sed无法检测字面量=与转义字符\r\n组合的问题求解
用sed/grep处理=\r\n拆分的行合并问题
为什么直接匹配=\r\n不行?
sed默认识别的是Unix风格换行(仅\n),而你文件里的是Windows式回车换行(\r\n),直接写=\r\n会因为sed对换行符的处理逻辑不匹配,导致无法识别二者的组合。
sed的处理方法
方法1:直接匹配行尾的=加回车
sed里可以用\x0D表示\r,直接匹配行尾的=\r并删除,下一行就会自动跟上完成合并:
sed -e 's/=\x0D$//' 你的输入文件名 > 输出文件名
方法2:先统一换行格式再处理
如果文件混合了不同换行格式,先把Windows换行转成Unix格式,再处理行尾的=即可:
# 先转换换行格式(需安装dos2unix工具,可通过brew/apt获取) dos2unix 你的输入文件名 # 删除行尾的=,合并拆分的行 sed -e 's/=$//' 你的输入文件名 > 输出文件名
macOS/BSD sed的特殊处理
如果你用的是macOS自带的BSD sed,可先转换回车符再处理:
tr '\r' '\n' < 你的输入文件名 | sed 's/=$//' > 输出文件名
若要直接修改原文件,GNU sed可添加-i参数:
sed -i 's/=\x0D$//' 你的输入文件名
grep的匹配方法
要查找包含该拆分模式的行,需启用Perl兼容正则(PCRE),使用以下命令:
grep -P '=\r\n' 你的输入文件名
或用十六进制写法更稳妥:
grep -P '=\x0D\x0A' 你的输入文件名
内容的提问来源于stack exchange,提问作者dzher
相关产品推荐
相关产品推荐

