繁体   English   中英

shell 中的字符串操作在一行中

[英]String manipulation in shell in a single line

我正在使用以下脚本

list=kmakalas@gmail.com;kmakalas@gmail.com;kmakalas@gmail.com;

对于上述我想提取

r=kmakalas,r=kmakalas,r=kmakalas

为此,我使用了以下 shell 操作

rev_list="r=${list//@gmail.com;/r=}

以上给了我

r=kmakalas,r=kmakalas,r=kmakalas,r=

得到r=kmakalas,r=kmakalas,r=kmakalas

我用rev2="${rev_list%,r=}"

是否有可能在单行命令中执行

使用 GNU awk:

awk -F '[=;]' '{ for(i=2;i<NF;i++) { split($i,map,"@");printf i==(NF-1)?"r="map[1]:"r="map[1]"," } printf "\n" }' <<< "$list"

解释:

awk -F '[=;]' '{                                                     # Set the field delimiter to "=" or ";"
                  for(i=2;i<NF;i++) { 
                      split($i,map,"@");                             # Loop through each field and split the field/address into an array map using "@" as the delimiter
                      printf i==(NF-1)?"r="map[1]:"r="map[1]","      # Print "r=" along with the "@" prefix
                  } 
                  printf "\n" 
                }' <<< "$list"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM