在数字

时间:2016-06-11 10:53:56

标签: linux awk sed

我在Linux OS中有一个包含一些随机数的文件:

1
22
333
4444
55555
666666
7777777
88888888

现在,我有两个条件:  1.从每个条目中删除最后3位数字,并在休息之间放置/。  2.对于数字< = 3,只需添加/替换为/符号。

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

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

需要的是:

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

请帮忙。

2 个答案:

答案 0 :(得分:5)

这样的事可能适合你:

% 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

答案 1 :(得分:0)

这可能适合你(GNU sed):

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

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