gpt4 book ai didi

linux - sed:删除包含字符类的整个单词

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:23:16 28 4
gpt4 key购买 nike

我想从文本文件中删除任何包含非字母字符的单词。例如

"ok 0bad ba1d bad3 4bad4 5bad5bad5"

应该变成

"ok"

我试过

echo "ok 0bad ba1d bad3 4bad4 5bad5bad5" | sed 's/\b[a-zA-Z]*[^a-zA-Z]\+[a-zA-Z]*\b/ /g'

最佳答案

下面的 sed 命令可以完成这项工作:

sed 's/[[:space:]]*[[:alpha:]]*[^[:space:][:alpha:]][^[:space:]]*//g'

它删除所有包含至少一个非字母字符的单词。最好使用像 [:alpha:] 这样的 POSIX 字符类,因为例如他们不会认为法语名字“François”是错误的(即包含非字母字符)。

说明

我们删除所有以任意数量的空格开头的模式,后面跟着任意(可能为零)的字母字符,然后是至少一个非空格和非字母字符,然后 glob 到单词的末尾(即直到下一个空格)。请注意,您可能希望将 [:space:] 换成 [:blank:],请参阅 this page详细解释这两个 POSIX 类之间的区别。

测试

$ echo "ok 0bad ba1d bad3 4bad4 5bad5bad5" | sed 's/[[:space:]]*[[:alpha:]]*[^[:space:][:alpha:]][^[:space:]]*//g'
ok

关于linux - sed:删除包含字符类的整个单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25158710/

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