我有一个包含重复单词的字符串,例如:
abc, def, abc, def
Run Code Online (Sandbox Code Playgroud)
如何删除重复项?我需要的字符串是:
abc, def
Run Code Online (Sandbox Code Playgroud)
我们有这个测试文件:
$ cat file
abc, def, abc, def
Run Code Online (Sandbox Code Playgroud)
删除重复的单词:
$ sed -r ':a; s/\b([[:alnum:]]+)\b(.*)\b\1\b/\1\2/g; ta; s/(, )+/, /g; s/, *$//' file
abc, def
Run Code Online (Sandbox Code Playgroud)
:a
这定义了一个标签a.
s/\b([[:alnum:]]+)\b(.*)\b\1\b/\1\2/g
这将查找由字母数字字符组成的重复单词,并删除第二次出现的单词.
ta
如果最后一个替换命令导致更改,则会跳回标签a以再次尝试.
通过这种方式,代码一直在寻找重复项,直到没有剩下.
s/(, )+/, /g; s/, *$//
这两个替换命令可以清除剩余的逗号空间组合.
对于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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2555 次 |
| 最近记录: |