我在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
请帮忙。
答案 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
从行尾删除最后三个(或更少)字符。用/
替换字符之间的空格。