如何让grep将匹配行的所有非空匹配部分输出在同一行?
如何让grep将匹配行的所有非空匹配部分输出在同一行?
嗨,这个问题我之前实操时也碰到过!grep -o确实会把每个匹配到的非空片段单独打一行,要把它们合并到同一行的话,结合几个常用的命令行工具就能轻松搞定,给你分享几个实用的方案:
用
tr替换换行符
把grep -o的输出通过管道传给tr,把换行符换成你想要的分隔符(比如空格):grep -o '你要匹配的模式' 目标文件 | tr '\n' ' '如果不想最后多一个尾部分隔符,可以再用
sed去掉:grep -o '你要匹配的模式' 目标文件 | tr '\n' ' ' | sed 's/ $//'用
xargs快速合并xargs默认会把多行输入转换成单行,用空格分隔内容,写法超简洁:grep -o '你要匹配的模式' 目标文件 | xargs要是你的匹配结果里本身包含空格,记得加
-d '\n'参数避免被拆分:grep -o '你要匹配的模式' 目标文件 | xargs -d '\n'用
awk自定义输出格式
如果你需要更灵活的分隔符(比如逗号、分号),awk是更好的选择:grep -o '你要匹配的模式' 目标文件 | awk '{printf "%s, ", $0} END{print ""}'把上面的
"%s, "改成"%s|"就能用竖线分隔,完全按需调整。
这些方案各有侧重:xargs最省心简洁,tr适合简单的换行替换,awk则能满足自定义格式的需求,你可以根据自己的场景挑着用~
备注:内容来源于stack exchange,提问作者pmor
相关产品推荐
相关产品推荐

