我想从文本文件中删除任何包含非alpha字符的单词。例如
"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'
最佳答案
使用awk
:
s="ok 0bad ba1d bad3 4bad4 5bad5bad5"
awk '{ofs=""; for (i=1; i<=NF; i++) if ($i ~ /^[[:alpha:]]+$/)
{printf "%s%s", ofs, $i; ofs=OFS} print ""}' <<< "$s"
ok
这个
awk
命令循环遍历所有单词,如果word与regex/^[[:alpha:]]+$/
匹配,则它将写入standard out。(i<NF)?OFS:RS
是添加OFS
的捷径,如果当前字段no小于NF
,否则它将写入RS
。同时使用
grep
+tr
:s="ok 0bad ba1d bad3 4bad4 5bad5bad5"
r=$(grep -o '[^ ]\+' <<< "$s"|grep '^[[:alpha:]]\+$'|tr '\n' ' ')
echo "$r"
ok
首先
grep -o
将字符串分解为单个单词。第二个grep只搜索带有字母的单词。最后tr
将\n
转换成空间。关于linux - sed:删除包含字符类的整个单词,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25158710/