繁体   English   中英

在bash生态系统中为逗号分隔的字符串添加后缀

[英]Add suffix to comma-separated strings in bash ecosystem

有没有一种使用标准gnu工具转换逗号分隔变量以为每个令牌添加后缀的方法? 例如

VARIABLE=`aaa,bbb,ccc`
suffix=`-foo`
Expected output = `aaa-foo,bbb-foo,ccc-foo` 

此外,如果我只有一个令牌,则转换的行为应相同

例如aaa > aaa-foo

echo "aaa,bbb,ccc" | sed -E 's/([^,]+)/\1-foo/g'

它使成组的字符不是“,”,然后在其上附加-foo

带有变量:

suffix="-foo"; VARIABLE="aaa,bbb,ccc"; echo ${VARIABLE} | sed -E "s/([^,]+)/\1${suffix}/g"
echo $VARIBLE | tr "," "\n" | awk '{print $1"-foo"}' | paste -sd "," -

说明:

将每个令牌放在一行上

tr "," "\n"

在每个标记后面附加“ -foo”

awk '{print $1"-foo"}' 

加入原来的逗号

paste -sd "," -

尝试:

answer = `echo $VARIABLE | sed "s/,/-foo,/g" | sed "s/$/-foo/"`

如果需要将后缀作为变量,请尝试:

answer = `echo $VARIABLE | sed "s/,/${suffix},/g" | sed "s/$/${suffix}/"`

我目前无法使用Unix盒来证明它的工作原理。

下列:

s="aaa,bbb,ccc"
IFS=,
a=( $s )
mapfile -t b < <(printf '%s-foo\n' "${a[@]}")

应该给我们:

$ declare -p b
declare -a b=([0]="aaa-foo" [1]="bbb-foo" [2]="ccc-foo")

从那里开始,如果您可以通过多种方式重建原始格式...

IFS=, eval 'JOINED="${b[*]}"'

或者,如果您不喜欢使用eval ,也许:

d=""; o=""
for x in "${b[@]}"; do
  printf -v o '%s%s%s' "$o" "$d" "$x"
  d=,
done

...这会将完整的修改后的字符串放入$o

使用bash参数扩展

var='aaa,bbb,ccc';[ -n "$var" ] && printf "%s\n" "${var//,/-foo,}-foo"

暂无
暂无

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

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