gpt4 book ai didi

bash - 如何从 Bash 脚本中的字符串中删除重复的单词?

转载 作者:行者123 更新时间:2023-11-29 08:59:11 25 4
gpt4 key购买 nike

我有一个包含重复单词的字符串,例如:

abc, def, abc, def

如何删除重复项?我需要的字符串是:

abc, def

最佳答案

我们有这个测试文件:

$ cat file
abc, def, abc, def

删除重复的单词:

$ sed -r ':a; s/\b([[:alnum:]]+)\b(.*)\b\1\b/\1\2/g; ta; s/(, )+/, /g; s/, *$//' file
abc, def

工作原理

  • :a

    这定义了一个标签a

  • s/\b([[:alnum:]]+)\b(.*)\b\1\b/\1\2/g

    这将查找由字母数字字符组成的重复单词并删除第二次出现的单词。

  • ta

    如果最后一个替换命令导致更改,这将跳回到标签 a 以重试。

    通过这种方式,代码会不断寻找重复项,直到没有重复项为止。

  • s/(, )+/,/g; s/, *$//

    这两个替换命令会清除任何遗留的逗号-空格组合。

Mac OSX 或其他 BSD 系统

对于 Mac OSX 或其他 BSD 系统,尝试:

sed -E -e ':a' -e 's/\b([[:alnum:]]+)\b(.*)\b\1\b/\1\2/g' -e 'ta' -e 's/(, )+/, /g' -e 's/, *$//' file

使用字符串代替文件

sed 可以轻松处理来自文件(如上所示)或来自 shell 字符串(如下所示)的输入:

$ echo 'ab, cd, cd, ab, ef' | sed -r ':a; s/\b([[:alnum:]]+)\b(.*)\b\1\b/\1\2/g; ta; s/(, )+/, /g; s/, *$//'
ab, cd, ef

关于bash - 如何从 Bash 脚本中的字符串中删除重复的单词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30294915/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com