2016-06-11 89 views
-2

我在Linux操作系統包含一些隨機數的文件:插入符號

1 
22 
333 
4444 
55555 
666666 
7777777 
88888888 

現在,我有兩個條件: 1.刪除最後3位數從每一個條目,並在休息間放/。 2.對於數字< = 3,只需使用/符號進行添加/替換。我想這隻能滿足需要1

命令是:

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

期望出需要:

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

請幫助。

+1

Downvoted,因爲它之前在http://stackoverflow.com/q/37247248/1745001問,然後放棄了一個月。 –

回答

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 
0

這可能會爲你工作(GNU sed):

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

刪除行尾的最後三個(或更少)字符。用/的字符替換字符之間的空白。