1. 程式人生 > >LeetCode(193. Valid Phone Numbers)(sed用法)

LeetCode(193. Valid Phone Numbers)(sed用法)

hat 數據文件 工具 version flags png digi lac inpu

193. Valid Phone Numbers

Given a text file file.txt that contains list of phone numbers (one per line), write a one liner bash script to print all valid phone numbers.

You may assume that a valid phone number must appear in one of the following two formats: (xxx) xxx-xxxx or xxx-xxx-xxxx. (x means a digit)

You may also assume each line in the text file must not contain leading or trailing white spaces.

Example:

Assume that file.txt has the following content:

987-123-4567
123 456 7890
(123) 456-7890

Your script should output the following valid phone numbers:

987-123-4567
(123) 456-7890

題解:驗證字符串是否為正確電話號碼格式

解法一: awk

註:

  • awk ‘/正則表達式/‘ file.txt
  • [0-9]{3}: 表示 0~9數字匹配三次
  • ([0-9]{3}-|\([0-9]{3}\)): 表示為一組, | 表示為或
awk /^([0-9]{3}-|\([0-9]{3}\) )[0-9]{3}-[0-9]{4}$/ file.txt 

技術分享圖片

解法二:grep

註意:\d{3}來表示[0-9]{3};-P:逐行匹配

grep -P ^(\d{3}-|\(\d{3}\) )\d{3}-\d{4}$ file.txt 

技術分享圖片

解法三:sed

補充sed用法:

簡介:sed是流編輯工具,用來對文本進行過濾和替換。sed通過輸入讀取文件內容,但 一次僅讀取一行內容

進行某些指令處理後輸出,sed更適合於處理大數據文件。

基本原理:sed在處理文本文件的時候,會在內存上創建一個模式空間,然後把這個文件的每一行調入模式空間用相應的命令處理,處理完輸出;接著處理下一行,直到最後。

基本語法:

(1)sed [選項] [定址commands] [inputfile]

關於定址:

  • 定址可以是0個、1個、2個;通知sed去處理文件的哪幾行。
  • 0個:沒有定址,處理文件的所有行
  • 1個:行號,處理行號所在位置的行
  • 2個:行號、正則表達式,處理被行號或正則表達式包起來的行

(2)選項:

--version 顯示sed版本hao

--help 顯示幫助文檔

-n 關閉默認輸出,默認將自動打印所有行

-e 多點編輯,允許多個腳本指令被執行。

-r 支持擴展正則+ ? () {} |

-i 可以修改原文件,慎用!

-f 支持使用腳本

命令:

p 打印行

d 刪除行

s 替換

n 替換第幾個匹內容

w 另存為

a 之後添加一行

i 當前行之前插入文本

y 替換匹配內容

(p和-n合用)

技術分享圖片

(d:刪除)

技術分享圖片

(s/pattern/replacement/flags)

技術分享圖片

題解:

sed -n -r /^([0-9]{3}-|\([0-9]{3}\) )[0-9]{3}-[0-9]{4}$/p file.txt 

技術分享圖片

LeetCode(193. Valid Phone Numbers)(sed用法)