2016-05-17 45 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

這裏有一個簡單的sed字符串命令:sed「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 
相關問題