2016-05-17 7 views
0

Например, мой файл имеет следующие данные:Как усечь первую цифру числа?

$ cat sample.txt 

19999119999,string1,dddddd 
18888135790,string2,dddddd 
15555555500,string3,dddddd 

Это образец данных. Как мы можем удалить ТОЛЬКО первую цифру из каждой строки? Мой выход должен быть:

$ cat output.txt 
9999119999,string1,dddddd 
8888135790,string2,dddddd 
5555555500,string3,dddddd 

Есть ли способ разбора каждого символа линии с использованием grep или sed? Или любой другой способ получить желаемый результат?

+2

Вот простой СЕПГ строка: СЭД «s/^ [ 0-9] // ' – user3486184

+0

Итак, это вопрос удаления первого символа в строке, не так ли? – fedorqui

+0

Что произойдет, если число в первом поле является одноразрядным числом? Должна ли эта цифра быть удалена, не оставляя номера? Если нет (так что вы хотите только усечь первую цифру многозначного числа), то вам нужно быть немного сложнее, чем 'sed 's/^ [0-9] //'' - вам нужно 'sed 's/^ [0-9] \ ([0-9] \)/\ 1 /' '(найдите две цифры в начале строки и замените только вторую). Если вы уверены, что в первом поле никогда не будет однозначного числа, вы можете использовать оригинальный простой скрипт - использование регулярных выражений часто является балансирующим действием между надежностью и простотой. –

ответ

1

Попробуйте это:

$ sed -r 's/^[0-9](.*)/\1/' sample.txt 

Выход: - (. *)

9999119999,string1,dddddd 
8888135790,string2,dddddd 
5555555500,string3,dddddd 
  • ^[0-9] Первая цифра каждой строки
  • - Содержимое каждой строки, кроме первой цифры
  • \ 1 - (. *) Обозначим содержание

Извините за мой плохой английский.

+0

удаляет все события из 1 из данных? И не могли бы вы объяснить свой сценарий? – intruder

+1

Упрощенный: 'sed 's/^ [0-9] //' sample.txt'. Или, если первая цифра всегда '1', поскольку злоумышленник, кажется, говорит:' sed 's/^ 1 //' sample.txt' – John1024

+0

@intruder - я обновил свой ответ, извините за мой плохой английский. – Ren

0

Grep может решить эту проблему, посмотрев сзади. Для этого вам необходимо -P вариант:

grep -Po '(?<=^\d)(.+)' file 

или в сокращенном:

grep -Po '^\d\K.+' file 

(?<=^\d)/^\d\K часть является вид сзади, что соответствует первой цифре.

4

Вам просто нужно напечатать от второго символа на:

$ cut -c2- file 
9999119999,string1,dddddd 
8888135790,string2,dddddd 
5555555500,string3,dddddd 

Или, используя sed, удалить первый символ:

$ sed 's/^.//' file 
9999119999,string1,dddddd 
8888135790,string2,dddddd 
5555555500,string3,dddddd 
Смежные вопросы