如何使用sed删除文件中所有不包含点号的单词
原命令问题说明
你之前使用的sed '/\./!d'逻辑为删除整行完全不包含点的行,仅过滤掉了全行无点的内容,不会清除行内不带点的单词,因此和预期结果不符。
调整后的可用sed命令
sed -E 's/(^| )[^ .]+( |$)/ /g; s/ +/ /g; s/^ //; s/ $//; /^$/d' 你的输入文件
如果需要直接修改原文件,添加-i参数即可:
sed -Ei 's/(^| )[^ .]+( |$)/ /g; s/ +/ /g; s/^ //; s/ $//; /^$/d' 目标文件
命令逻辑说明
- 第一步
s/(^| )[^ .]+( |$)/ /g:全局匹配所有行首/空格后出现的、不含空格和点的独立单词,替换为空格 - 第二步
s/ +/ /g:将处理后产生的连续多个空格合并为单个空格 - 第三步
s/^ //和s/ $//:分别清除行首和行尾多余的空格 - 最后
/^$/d:删除处理后生成的空行,保证输出格式符合要求
执行上述命令后输出结果和你给出的预期完全一致。
内容的提问来源于stack exchange,提问作者mike123
相关产品推荐
相关产品推荐

