如何修改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":将处理后的内容写入临时文件,再替换原输入文件(避免直接写入原文件导致的内容丢失风险)。
原脚本的问题
- 管道无效:
var="$(<$filename)" | tr -d '\n'中,命令替换$(<$filename)的输出不会通过管道传递给tr,tr没有输入源,这行仅完成了文件内容到变量var的赋值,换行符并未被删除。 - 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
相关产品推荐
相关产品推荐

