首页 > 解决方案 > 如何在shell中的2个字符之间添加逗号

问题描述

在输入字符串示例之后,我输入了一个带有 1 个大写字母的字符串或一个带有 2 个大写字母的字符串:

AB
AN
FG
K
M

我想执行一个shell命令/函数,将输入字符串转换为用逗号分隔的2个小写字母“,”(如果输入是2个大写字母)或1个小写字母(如果输入是1个大写字母)这

上述示例的输出

a,b
a,n
f,g
k
m

我试过这个

(echo -n "${s:0:1}" && [ "${s,1:1}" != "" ] && echo -n ",${s:1:1}") | tr [A-Z] [a-z]

但我认为 sed / awk 有最简单的解决方案

标签: regexawk

解决方案


你可以使用这个 awk:

awk 'BEGIN{FS=""; OFS=","} {$0 = tolower($0); $1=$1} 1' file

a,b
a,n
f,g
k
m

细节:

  • FS="":使用空字段分隔符将每个字符拆分为单独的字段
  • OFS=",": 使用输出字段分隔符作为,
  • $0 = tolower($0): 小写所有大写字符
  • $1=$1: 强制awk使用OFS值重写每条记录
  • 1:打印每条记录

替代解决方案:

如果您awk不支持FS=""(空字段分隔符),请使用此解决方案:

awk -v OFS=, '{$0 = tolower($0); gsub(/[a-z]/, "&,"); sub(/,$/, "")} 1' file

推荐阅读