如何在Shell或Awk中拆分含引号的行并格式化存储到数组?
这题我熟!不管用awk还是sed(Shell工具链里的常用命令)都能轻松搞定,给你几个实用的方案:
方案1:用Awk处理
如果是直接处理单行字符串,你可以用管道把字符串传给awk,用gsub做全局替换:
echo '"id":BinData(3,"dUpxQ3s018I0ijzNKWF+mQ=="),"id":BinData(3,"dUpxQ3s018I0ijzNKWF+lw==")' | awk '{gsub(/\),\"id\":/, ") \"id\":"); print}'
如果是处理文件里的内容(比如input.txt),直接把文件名传给awk就行,还能重定向到新文件保存结果:
awk '{gsub(/\),\"id\":/, ") \"id\":"); print}' input.txt > output.txt
原理很简单:用gsub匹配),\"id\":这个模式(也就是前一个条目结尾的)加上分隔用的,\"id\":),把它替换成) \"id\":,把逗号换成空格就达到你要的数组格式了。
方案2:用Sed处理
Sed做字符串替换更轻量,一行命令就能搞定:
处理单行字符串:
echo '"id":BinData(3,"dUpxQ3s018I0ijzNKWF+mQ=="),"id":BinData(3,"dUpxQ3s018I0ijzNKWF+lw==")' | sed 's/),\"id\":/) \"id\":/'
如果你的文本里有多个这样的逗号分隔条目,加上g参数做全局替换:
echo '多个条目字符串' | sed 's/),\"id\":/) \"id\":/g'
处理文件的话同样直接传文件名:
sed 's/),\"id\":/) \"id\":/g' input.txt > output.txt
这两个方案都能精准把你要的逗号换成空格,生成符合要求的格式~
内容的提问来源于stack exchange,提问作者shivam
相关产品推荐
相关产品推荐

