[英]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.