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/模式/替换/