如何删除文本行中的重复项?

克努西尔

我找不到有关如何执行此操作的任何信息。我阅读了关于 uniq 的文档,但它只处理重复的行,我需要删除同一行中的重复字符串。

假设我有

TodayToday is an an array

我需要它输出

Today is an array

谢谢!

塔迪斯

uniq适用于整行,处理行内容的正确工具是sed(您也可以使用awkPerl 或 Perl 来做这些单行的其他方式)。

由于您在评论中说您已经使用sed并标记了您的问题“linux”,因此根据您提供的使用GNU sed 的测试用例,您将如何使用相同的大写或小写序列获得重复删除

$ echo 'TodayToday is an an array' | sed -e 's/\b\([a-zA-Z ]\+\)\1/\1/g'
Today is an array

如果您想将“TodayTODay”视为重复,那么您可以对此(添加不i区分大小写的标志):

$ echo 'TodayTODay is an an array' | sed -e 's/\b\([a-z ]\+\)\1/\1/gi'
Today is an array

如果要将由空格分隔的单词组(例如“Today is an arrayToday is an array”)视为重复,则可以执行此操作(在匹配集中添加空格):

$ echo 'Today is an arrayTODay is an array' | sed -e 's/\b\([a-z ]\+\)\1/\1/gi'
Today is an array

这样做,不会,但允许正则表达式决定不改变一个词,如“ nana

$ echo 'Her name was Nana' | sed -e 's/\b\([a-z ]\+\)\1/\1/gi'
Her name was Na

但是我们可以有把握地说我们吃“香蕉”,因为\b在正则表达式之前引入词边界来解决@purplepsycho引起我们注意的情况:

$ echo 'We eat banana' | sed -e 's/\b\([a-z ]\+\)\1/\1/gi'
We eat banana

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章