删除正斜杠和逗号之间(包括)的所有文本

删除正斜杠和逗号之间(包括)的所有文本

我有一个 .txt 文档,其中包含数千个具有相似布局的字符串,但其中一些行包含我不想要的附加信息。

这是一个例子:

202212_08,ABC123/A1234,AB,,C123
202212_08,CDEF1233/A5678,FG,,C345

我希望输出如下:

20221208,ABC123,C123
20221208,CDEF1233,C344

我尝试过使用正则表达式,但不断收到错误并且输出为空。感谢您的帮助。

答案1

sed

$ sed -e 's:/.*,:,:' input.txt 
202212_08,ABC123,C123
202212_08,CDEF1233,C345

这会将从/行中第一个字符到,行中最后一个字符的所有内容替换为单个,字符。


但是,当输入数据包含多个字段时,通常最好使用 awk 或 perl,因为它们允许您单独操作和/或打印每个字段。

例如,以下 awk 脚本使用内置函数/.*从每个输入行的第二个字段中删除,然后打印第一个 ( )、第二个 ( ) 和最后一个 ( ) 字段。sub()$1$2$NF

$ awk -F, -vOFS=, '{sub(/\/.*/,"",$2); print $1, $2, $NF}' input.txt 
202212_08,ABC123,C123
202212_08,CDEF1233,C345

或使用 perl:

$ perl -F, -lane '$F[1] =~ s:/.*::; print join(",",@F[0,1,-1])' input.txt 
202212_08,ABC123,C123
202212_08,CDEF1233,C345

-F,选项设置字段分隔符(类似于 awk),该-a选项使输入自动拆分为名为 的数组@F-l打开 Perl 对行结尾的自动处理(例如换行符或\n)并使-nPerl 像 一样工作sed -n-e告诉 perl 下一个参数是要执行的脚本。

请注意,perl 数组索引从零开始,而不是从一开始,数组$F[1]的第二个元素也是如此@F,数组切片@F[0,1,-1]是数组的第一个、第二个和最后一个元素。

相关内容