【问题标题】:insert symbol between numbers在数字之间插入符号
【发布时间】:2016-06-11 10:53:55
【问题描述】:

我在 Linux 操作系统中有一个包含一些随机数的文件:

1
22
333
4444
55555
666666
7777777
88888888

现在,我有两个条件: 1. 从每个条目中删除最后 3 位数字,并将 / 放在其余部分之间。 2. 对于数字 / 符号。

我正在尝试的仅满足第一个要求的命令是:

 sed -e 's|\(.\)|\1/|g;s|\(.*\)/\(.\/\)\{3\}|\1|g'

所需的:

/
/
/
4
5/5
6/6/6
7/7/7/7
8/8/8/8/8

请帮忙。

【问题讨论】:

标签: linux awk sed


【解决方案1】:

这样的事情可能对你有用:

% sed 's/.\{1,3\}$//;s/./\/&/g;s/.//;s/^$/\//' file
/
/
/
4
5/5
6/6/6
7/7/7/7
8/8/8/8/8

这里没有聪明的举动:

s/.\{1,3\}$//; # Remove last 3 character
s/./\/&/g;     # Insert / before each character
s/.//;         # Remove first character (it's now a /)
s/^$/\//       # Insert slash on all empty lines

gawk 的替代解决方案:

awk -v FS='' -v OFS='/' '{if (NF > 3) NF=(NF-3); else $0 = OFS}1' file

【讨论】:

    【解决方案2】:

    这可能对你有用(GNU sed):

    sed -r 's/.{1,3}$//;s#\B#/#g' file
    

    从行尾删除最后三个(或更少)字符。用/'s 替换字符之间的空格。

    【讨论】: