除现有命令外,是否有其他sed方式提取行中逗号前内容?
回答
当然有不少其他用sed实现的方法,甚至还有其他文本处理工具也能轻松搞定这个需求,下面给你列举几种常见的方式:
1. 用反向引用捕获目标内容
这种方式通过正则分组捕获逗号前的内容,然后只保留这个分组的结果:
sed 's/^\(.*\) , .*/\1/' test.txt
这里^\(.*\) , .*会匹配整行内容,把从行首到,之前的部分捕获到第一个分组里,替换时只输出这个分组的内容,就能得到想要的结果。
2. 利用sed的P命令截断输出
通过-n参数关闭sed的默认输出,然后把,替换成换行符,再用P命令只打印换行符之前的内容:
sed -n 's/ , /\n/;P' test.txt
P命令和普通的p不同,它只会打印模式空间中第一个换行符之前的内容,刚好就是我们需要的学校名称部分。
3. 直接删除逗号及后续内容(简化版)
其实你的原命令可以稍微简化一下,功能完全一致:
sed 's/,.*//' test.txt
这里直接匹配逗号和后面的所有内容并替换为空,和你原来的sed 's/[,].*//'效果一样,只是写法更简洁。
额外推荐:非sed的高效工具
如果不局限于sed,还有几个常用工具也能快速完成这个任务:
- cut命令:指定逗号为分隔符,提取第一个字段
cut -d',' -f1 test.txt - awk命令:指定
,为分隔符,打印第一个字段awk -F', ' '{print $1}' test.txt
内容的提问来源于stack exchange,提问作者Rashad
相关产品推荐
相关产品推荐

