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を使用する1つの方法です。設定記録区切り記号 RS
保持したい区切り文字を一致させ、他の\r\n
シーケンスを消去します。
gawk -vRS=' \r\n ' '{gsub(/\r\n/, ""); printf "%s%s", $0, RT}'