Regex 使用sed删除空文件中的字符串结果

Regex 使用sed删除空文件中的字符串结果,regex,replace,sed,Regex,Replace,Sed,我有一个大的文本文件,在这个文件中,有时写一个=字符,然后写一个换行符,把长行分成多行。(来自Kaggle的安然电子邮件数据)。因为连单词都是这样断开的,我想用数据做一些机器学习,所以我想去掉这些断开。据我所知,组合=\n仅用于这些中断,因此如果我删除这些中断,在没有中断的情况下,我拥有相同的信息,并且不会丢失任何内容 我不能使用tr,因为它只替换1个字符,但我有两个字符要替换 到目前为止,我使用的sed命令无效: sed--in-place--quiet--regexp-extended's

我有一个大的文本文件,在这个文件中,有时写一个
=
字符,然后写一个
换行符,把长行分成多行。(来自Kaggle的安然电子邮件数据)。因为连单词都是这样断开的,我想用数据做一些机器学习,所以我想去掉这些断开。据我所知,组合
=\n
仅用于这些中断,因此如果我删除这些中断,在没有中断的情况下,我拥有相同的信息,并且不会丢失任何内容

  • 我不能使用
    tr
    ,因为它只替换1个字符,但我有两个字符要替换
  • 到目前为止,我使用的
    sed
    命令无效:

    sed--in-place--quiet--regexp-extended's/=\n//g'email\u aa\u edit

    其中
    email\u aa\u edit
    是安然邮件数据的一部分(用于拆分),是我的输入文件。然而,这只会产生一个空文件,我不知道为什么。Afaik
    =
    本身不是特殊字符,换行符应该是
    \n


删除这些出现的
=\n
的正确方法是什么?

您不能删除换行符,因为sed可以逐行工作,但如果您将下一行附加到模式空间,则可以:

sed ':a;/=$/{N;s/=\n//;ta}' file
详情:

:a; # defines a label "a"
/=$/ { # if the line ends with =
    N; # append the next line to the pattern space
    s/=\n//; # replace the =\n
    ta # jump to label "a" when something is replaced (that's always the case
       # except if the last line ends with =)
}

注意:如果您的文件使用Windows换行符序列,请将
\n
更改为
\r\n

您不能删除换行符,因为sed可以逐行工作,但如果将下一行附加到模式空间,则可以:

sed ':a;/=$/{N;s/=\n//;ta}' file
详情:

:a; # defines a label "a"
/=$/ { # if the line ends with =
    N; # append the next line to the pattern space
    s/=\n//; # replace the =\n
    ta # jump to label "a" when something is replaced (that's always the case
       # except if the last line ends with =)
}

注意:如果您的文件使用Windows换行符序列,请将
\n
更改为
\r\n

我会使用perl:
perl-pi-e's/=\n//'email\u aa\u edit
@melpomene有趣的是,我确信以前尝试使用perl时使用了相同的正则表达式,但其他参数不同,它不起作用。你的确实有效。我会使用perl:
perl-pi-e的/=\n/'email\u aa\u edit
@melpomene有趣的是,我确信我以前尝试使用perl时使用了相同的正则表达式,但其他参数不同,它不起作用。你的命令行得通。我不知道为什么,但我的输入文件保持不变,好像那个命令根本没有任何效果。@Zelphir:添加就地选项(我编写的命令没有任何开关,以使其更清晰)。是的,这行得通。至少在我弄明白之后,我必须从命令中删除
--quiet
选项:)@casimirithippolyte您能在同一个sed命令中链接模式和子状态吗?像这样-->'s/pattern/{s/pattern/{s/pattern/substation}}@MohammadYusufGhazi:不,你不能。但请注意,这是一个奇怪的想法,因为如果可能的话,它可以简化为一个简单的
s/pattern/substitution/
,我不知道为什么,但我的输入文件保持不变,就好像那个命令根本没有任何效果一样。@Zelphir:添加就地选项(我编写的命令没有任何开关,以使其更清晰)。是的。至少在我弄明白之后,我必须从命令中删除
--quiet
选项:)@casimirithippolyte您能在同一个sed命令中链接模式和子状态吗?像这样-->'s/pattern/{s/pattern/{s/pattern/substation}}@MohammadYusufGhazi:不,你不能。但请注意,这是一个奇怪的想法,因为如果可能的话,它可以简化为一个简单的
s/模式/替换/