你可以用 grep 配合 pastetr 将匹配的多行合并为一行,并用逗号分隔。最简洁可靠的方式是:

grep "pattern" file.txt | paste -sd ','
  • paste -sd ','-s 表示串行合并(而非按列合并),-d ',' 指定分隔符为逗号。
    不会在行末添加多余的逗号。

其他方法(按需选择):

  1. 使用 tr(会在末尾多一个逗号,需要额外处理):

    grep "pattern" file.txt | tr '\n' ',' | sed 's/,$//'
  2. 使用 awk(更灵活,可控制是否加空格等):

    grep "pattern" file.txt | awk '{printf "%s%s", sep, $0; sep=","} END {print ""}'
  3. sed(不依赖其他命令,但稍复杂):

    grep "pattern" file.txt | sed ':a;N;$!ba;s/\n/,/g'

示例
假设 data.txt 内容为:

apple
banana
cherry
date

执行 grep 'a' data.txt | paste -sd ',' 输出:

apple,banana,date

注意:如果行内本身包含逗号,合并后可能引起歧义,建议使用不易冲突的分隔符(如 |;),或对输出格式做更精细的处理。

文档更新时间: 2026-04-10 01:16   作者:月影鹏鹏
IT运维支持-AIWALY-月影工作室