求助:使用grep提取仅含[[:alnum:]]和[[:punct:]]的内容并过滤特殊字符
问题:过滤词表中的非目标字符,保留字母数字与标点
需求:从词表中保留仅包含字母数字[[:alnum:]]和标点符号[[:punct:]]的内容,过滤掉ʥ、ʯ、ʬ这类不属于目标范围的字符。
输入示例
love great2 pl@ce &rt joHn &^~%$@!$#)(_-+ hearʥ ʯbattle fiʬeld
期望输出
love great2 pl@ce &rt joHn &^~%$@!$#)(_-+ hear battle field
原命令问题
你尝试的命令:
grep -E -o --text "[[:punct:]]*[[:alnum:]]|[[:alnum:]]*[[:punct:]]" list.txt > Final.txt
存在两个核心问题:
-o选项会让grep仅输出正则匹配到的片段,而非整行,导致完整合法行被拆分,无法保留原有行结构- 正则逻辑仅能匹配“标点+字母数字”或“字母数字+标点”的片段,无法处理行内夹杂非法字符的情况,也不能移除非法字符并保留行内合法内容
正确命令
使用sed进行全局字符替换,直接删除所有非目标字符:
sed 's/[^[:alnum:][:punct:]]//g' list.txt > Final.txt
命令说明
s/...//g:全局替换模式,将每行中匹配到的字符替换为空(即删除)[^[:alnum:][:punct:]]:匹配所有不属于字母数字或标点的字符,正好对应你需要过滤的ʥ、ʯ、ʬ等字符
执行该命令后,输出结果与期望完全一致。
内容的提问来源于stack exchange,提问作者xsukax
相关产品推荐
相关产品推荐

