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}'