如何在每个字符后面添加一个特定字符?

如何在每个字符后面添加一个特定字符?

我有一个号码 -> 12345

我想要以下格式的输出

1+2+3+4+5

echo `cat fl.txt | paste -s -d ''`

仅给出12345.

但是当我在下面的命令中添加这个 + 时,它会给出相同的12345.

echo `cat fl.txt | paste -s -d '' | tr -s '' '+'`

答案1

使用 GNU sed,您还可以执行以下操作:

sed 's/./+&/2g'

答案2

将字符串拆分为字符更容易:

fold -w1 file | paste -sd+ -

某些版本的fold命令没有该-c选项,但有该-w选项。在这种情况下,它们可以互换。
或者:

grep -o '.' file | paste -sd+ -

也许用一个命令:

awk -v OFS='+' -F '' '{$1=$1; print}' file

和:

sed 's/\B/+/g' file

答案3

zsh

$ number=12345
$ printf '%s\n' ${(j[+])${(s[])number}}
1+2+3+4+5

s[]参数扩展标志拆分$number为其字符组件。j[+]与他们一起回来+

bash

$ number=12345
$ shopt -s extglob
$ tmp=${number//@()/+}
$ printf '%s\n' "${tmp#+}"
1+2+3+4+5

${number//@()/+}替换所有出现的没有什么+。由于某种原因${number///+}似乎不起作用bash(但它起作用zsh)。

答案4

只是使用 perl 而不是 awk 或 sed 的其他一些可能性:

echo 12345 | perl -lpe '$_ = join "+", split //;'

或(如果号码保存在fl.txt

# echo 12345 > fl.txt
perl -lpe '$_ = join "+", split //;' fl.txt

参数-l只是避免包含行结尾(当用“+”连接时)。否则你就会得到1+2+3+4+5+这样的结果。

或者,您可以使用该方法,类似于已经提到的 sed 方法:

perl -pe 's/.\K/+/g; s/\+$//;' fl.txt

或者

perl -pe 's/.\K(?!$)/+/g;' fl.txt

或者

perl -pe 's/\B/+/g;' fl.txt

所有情况下的输出:

1+2+3+4+5

相关内容