正则表达式查找并替换 0x0D、0x0A 字符

正则表达式查找并替换 0x0D、0x0A 字符

0x0A0x0D我有一个数据库转储的文本文件,行中间有一些换行符 ( )。我想用逗号替换它们,但我不能简单地做到这一点,因为这些字符是我实际的换行符想要换行符!

但我注意到我想要保留的换行序列被空格字符 ( 0x20) 包围,因此我正在考虑使用正则表达式来查找和替换任何0x0A0x0D没有前导或尾随空格的序列。

我怎样才能做到这一点?

答案1

当然,空白字符的正则表达式是\s.但是,由于您想要一个非空白字符,因此可以使用\S!因此,您要替换的正则表达式将是\S\n\r\S.

编辑:

#!/usr/bin/perl
use strict; use warnings;
my $pattern = "xxxxxxxxxxxxxxxxxxxy\n\ryxxxxxxxxxxxxxxxxxxx \n\r xxxxxxxxxxxxxxxxxxxy\n\ryxxxxxxxxxxxxxxxxxxx";
$pattern =~ s/(\S)(\n\r)(\S)/$1$3/g;
print "$pattern\n";
exit;

结果:

xxxxxxxxxxxxxxxxxxxyyxxxxxxxxxxxxxxxxxxx 

 xxxxxxxxxxxxxxxxxxxyyxxxxxxxxxxxxxxxxxxx

我更改了正则表达式以替换为,$1$3以便您保留匹配的字符\S

答案2

这是使用 GNU awk 的一种方法。设置记录分隔符 RS匹配您想要保留的分隔符,并清除其他\r\n序列。

gawk -vRS=' \r\n ' '{gsub(/\r\n/, ""); printf "%s%s", $0, RT}'

相关内容