首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在shell中的两个字符之间添加逗号

如何在shell中的两个字符之间添加逗号
EN

Stack Overflow用户
提问于 2020-06-19 16:38:14
回答 3查看 737关注 0票数 2

在输入字符串的示例之后,这里有一个带有大写字母的字符串或两个大写字母的字符串:

代码语言:javascript
复制
AB
AN
FG
K
M

我希望执行一个shell命令/函数,该命令/函数将输入字符串转换为两个小写字母,用逗号“、”(如果输入是两个大写字母)或一个小写字母(如果输入是一个大写字母)

上述示例的输出

代码语言:javascript
复制
a,b
a,n
f,g
k
m

我试过这个

代码语言:javascript
复制
(echo -n "${s:0:1}" && [ "${s,1:1}" != "" ] && echo -n ",${s:1:1}") | tr [A-Z] [a-z]

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-06-19 16:41:18

您可以使用这个awk:

代码语言:javascript
复制
awk 'BEGIN{FS=""; OFS=","} {$0 = tolower($0); $1=$1} 1' file

代码语言:javascript
复制
a,b
a,n
f,g
k
m

详细信息:

  • FS="":使用空字段分隔符将每个字符分割为单独的field
  • OFS=",":,使用输出字段分隔符作为,
  • $0 = tolower($0):小写characters
  • $1=$1:Force awk重写每个记录,使用OFS value
  • 1:打印每个记录

替代解决方案:

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

代码语言:javascript
复制
awk -v OFS=, '{$0 = tolower($0); gsub(/[a-z]/, "&,"); sub(/,$/, "")} 1' file
票数 2
EN

Stack Overflow用户

发布于 2020-06-19 16:42:32

你能试一下吗。

代码语言:javascript
复制
awk '{$0=tolower($0);gsub(/[a-z]/,"&,");sub(/,$/,"")} 1' Input_file

解释:首先通过tolower将整行字母转换成小写字母,然后在全球范围内用字母和,替换每个字母。最后,将最后出现的,替换为NULL,然后提到1打印编辑的行。

第二个解决方案:使用GNU sed

代码语言:javascript
复制
sed 's/[[:alpha:]]/\L&,/g;s/,$//' Input_file
票数 2
EN

Stack Overflow用户

发布于 2020-06-19 16:51:18

如果你的awkgawk awk -v FS='' '$0=tolower($0) {$1=$1}1' OFS=',' myFile

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62474821

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档