2015-04-20 6 views
-1

Я пытаюсь удалить все, кроме первого числа и последних 6 цифр из каждой строки в файле. До сих пор я удалил все, но последние 6 цифр с использованием sed как так:удалить все, кроме первого и последнего 6 цифр

sed -r 's/.*(.{6})/\1/' test 

Будет ли способ для меня, чтобы изменить это так, что я держу первый номер тоже? Это число может быть любой длины, но за ним всегда будет пробел. В принципе, я хотел бы избавиться от /home/usr/file и поддерживать только 123456789 123456 Любая помощь была бы принята с благодарностью!

Входная линия:

123455679 /home/usr/file123456 

Желаемая Выход:

123456789 123456 

ответ

3

Сделайте то же самое, что и в конце концов в начале.

sed -r 's/(.).*(.{6})/\1\2/' test 

(я понятия не имею, насколько эффективно это, однако. Это может понадобиться для резервного трек длиной финального матча.)

Чтобы захватить первый «поле» (через пробел) и последние шесть символов, которые вы можете использовать.

sed -r 's/([^[:space:]]*) .*(.{6})/\1 \2/' test 

Хотя я думаю, что awk решение, как правило, лучше.

+0

Спасибо. Как бы я разместил пробел между двумя цифрами? – Sal

+0

Поместите пробел между '\ 1' и' \ 2' в замене. Они являются «захватами», которые относятся к группам в скобках в разделе шаблонов. Вы можете делать все, что хотите, с заменой. –

+0

Нет, эта строка не является входом @EdMorton. В каталогах могут быть цифры, но последние 6 символов всегда будут цифрами. Так, например, самое худшее, что может быть: '5/home/usr123/file123456' – Sal

3
echo 5 /home/usr/file123456 | awk '{print $1,substr($2,length($2)-5,6)}' 
+2

Не нужно указывать последний аргумент 'substr', поскольку по умолчанию он будет продолжать до конца строки. –

+0

@ tom-fenech Спасибо, не знал этого. –

0
$ echo '123456789 /home/usr123/file123456' | sed -r 's/ .*(.{6})/ \1/' 
123456789 123456 
+0

Благодарим за помощь. По какой-то причине это дает мне только последние 6 цифр, а не число до пути (123456789). Есть ли причина, почему это произойдет? – Sal

+0

'cat temp | сортировать | uniq -c | sort -rk1 | sed -r 's /. * (. {6})/\ 1 /'> temp2' это строка кода, с которой я его использую. – Sal

+1

'uniq -c' помещает пробелы перед первой цифрой, поэтому фактический текст, который вы хотите, чтобы эта команда обрабатывалась еще раз, не соответствует тому, что вы нам сказали, и показанному в вашем примере ввода. Излишне говорить, что это очень неприятно для тех из нас, кто пытается вам помочь. Возможно, это не связано: это плохая командная строка - google UUOC, и все это может быть единственной небольшой командой awk. –

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