You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Bash脚本实现分隔符转换与目标文本格式生成?

修改Bash脚本实现输入文件转纯字母逗号分隔格式

修改后的脚本

#!/bin/bash
filename=$1

# 处理逻辑:读取文件内容,去除换行,替换非字母为逗号,合并连续逗号,修正首尾逗号,最后写入原文件
tr -d '\n' < "$filename" | sed -E 's/[^a-zA-Z]+/,/g; s/^,//; s/,$//; s/$/ /' > temp.txt && mv temp.txt "$filename"

脚本功能说明

  • tr -d '\n' < "$filename":读取输入文件,删除所有换行符,将多行内容合并为一行。
  • sed -E 's/[^a-zA-Z]+/,/g':使用扩展正则表达式,将一个或多个非字母字符统一替换为逗号(覆盖所有特殊符号、数字、原有的分隔符)。
  • s/^,//:如果处理后的内容以逗号开头,移除开头的逗号。
  • s/,$//:如果处理后的内容以逗号结尾,移除结尾的逗号。
  • s/$/ /:在内容末尾添加一个空格(匹配你给出的期望输出格式)。
  • > temp.txt && mv temp.txt "$filename":将处理后的内容写入临时文件,再替换原输入文件(避免直接写入原文件导致的内容丢失风险)。

原脚本的问题

  1. 管道无效:var="$(<$filename)" | tr -d '\n' 中,命令替换$(<$filename)的输出不会通过管道传递给tr,tr没有输入源,这行仅完成了文件内容到变量var的赋值,换行符并未被删除。
  2. sed使用错误:sed -i 's/;/,/g' $var 中,-i是修改文件的选项,无法直接处理变量内容;同时仅替换了分号,未处理其他特殊符号、数字,也没有解决连续分隔符的问题。

可选优化(需安装moreutils)

如果系统安装了moreutils工具包,可以用sponge替代临时文件,简化脚本:

#!/bin/bash
filename=$1

tr -d '\n' < "$filename" | sed -E 's/[^a-zA-Z]+/,/g; s/^,//; s/,$//; s/$/ /' | sponge "$filename"

内容的提问来源于stack exchange,提问作者Vakula

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 07:36:31