【问题标题】:Use "sed" to Remove Capture Group 1 From All Lines In a File使用“sed”从文件中的所有行中删除捕获组 1
【发布时间】:2021-08-20 17:03:21
【问题描述】:

我目前有一个文件,其行如下:

ABCD123RTY,steve_tyler@gmail.com,10.20.30.142,2021-08-20T14:49:51.035Z
ABCD123QWE,thisguy@hotmail.com,10.20.30.245,2021-08-20T14:10:22.254Z
ABCD123DFG,calvin_hobbes2@netnet,10.20.30.l6,2021-08-20T15:30:34.480Z

我的目标是删除从“@”到下一个逗号的所有内容,使其看起来如下所示:

ABCD123RTY,steve_tyler,10.20.30.142,2021-08-20T14:49:51.035Z
ABCD123QWE,thisguy,10.20.30.245,2021-08-20T14:10:22.254Z
ABCD123DFG,calvin_hobbes2,10.20.30.l6,2021-08-20T15:30:34.480Z

我没有使用 sed 和 RegEx 表达式的经验。在测试网站上玩耍时,我想出了下面的 RegEx 字符串,其中捕获组 1 与我要删除的内容完全匹配: regex101.com Test

我将如何针对给定的输入文件将其放入“sed”命令中,并将结果写入新的输出文件。我最近尝试过以下方法:

sed 's/(@.+?),//' input.csv > input_Corrected.csv

正如另一个注释,我在 bash 脚本中执行此操作,其中我有一个 API 调用生成“input.csv”文件,然后想要运行这个 sed 命令来清理数据格式以匹配我的需要。

【问题讨论】:

  • 由于答案没有提到它,我将它作为评论添加在这里:非贪婪匹配(.+?)需要Perl兼容的正则表达式(PCRE),但sed只支持基本/扩展正则表达式 (BRE/ERE)。

标签: regex sed


【解决方案1】:

你可以使用

sed 's/@[^,]*,/,/' input.csv > input_Corrected.csv
sed 's/@[^,]*//' input.csv > input_Corrected.csv

@[^,]*, POSIX BRE 模式匹配@,然后匹配除, 之外的任何零个或多个字符,然后匹配,(在第一个示例中,如果匹配后必须有逗号,则使用它) 并替换为逗号(在第一个示例中,如果您使用第二种方法,请保持替换为空)。

online demo

s='ABCD123RTY,steve_tyler@gmail.com,10.20.30.142,2021-08-20T14:49:51.035Z
ABCD123QWE,thisguy@hotmail.com,10.20.30.245,2021-08-20T14:10:22.254Z
ABCD123DFG,calvin_hobbes2@netnet,10.20.30.l6,2021-08-20T15:30:34.480Z'
sed 's/@[^,]*,/,/' <<< "$s"

输出:

ABCD123RTY,steve_tyler,10.20.30.142,2021-08-20T14:49:51.035Z
ABCD123QWE,thisguy,10.20.30.245,2021-08-20T14:10:22.254Z
ABCD123DFG,calvin_hobbes2,10.20.30.l6,2021-08-20T15:30:34.480Z

【讨论】:

  • 非常感谢!第一个解决方案看起来对我来说非常有效!
【解决方案2】:

您可以使用以下正则表达式来仅删除有效电子邮件地址的内容。

sed "s/@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5})//g" input.csv > input_Corrected.csv

根据您的要求,您可以使用以下代码。因为它将替换文件中的所有电子邮件地址,就像您在文件“calvin_hobbes2@netnet”上的一样,这是无效的电子邮件地址。

sed "s/@[^,]*//g" input.csv > input_Corrected.csv

【讨论】:

    猜你喜欢
    • 2012-05-25
    • 2018-07-18
    • 1970-01-01
    • 2012-11-12
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 2011-12-15
    • 2023-03-05
    相关资源
    最近更新 更多