2016-06-11 3 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 

Альтернативное решение с простака:

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 

Удалите последние три (или меньше) символов с конца строки. Замените пустоту между символами /.

Смежные вопросы