LeetCode(193. Valid Phone Numbers)(sed用法)
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在處理文本文件的時候,會在內存上創建一個模式空間,然後把這個文件的每一行調入模式空間用相應的命令處理,處理完輸出;接著處理下一行,直到最後。
基本語法:
(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用法)