在寫shell程式的很多時候我麼需要提取字串中相應的值來做進一步的處理,比如需要寫乙個關閉某些程序的指令碼,此時就需要獲取這些程序的id然後加上kill命令來關閉這些程序,然而當我們使用ps命令去查詢程序id的時候我們得到的值不僅僅包含程序的id值,還包含很多資訊,提取程序id 這個關鍵字串的值就不得不使用兩個命令cut 和awk;
用法: cut 引數 檔名
說明:cut 命令從檔案的每一行剪下位元組、字元和字段並將這些位元組、字元和字段寫至標準輸出。
引數:
-b :以位元組為單位進行分割。這些位元組位置將忽略多位元組字元邊界,除非也指定了 -n 標誌。
-c :以字元為單位進行分割。
-d :自定義分隔符,預設為製表符。
-f :與-d一起使用,指定顯示哪個區域。
-n :取消分割多位元組字元。僅和 -b 標誌一起使用。如果字元的最後乙個位元組落在由 -b 標誌的 list 引數指示的
更多引數請參考:cut - -help
-b用法:
以位元組為單位,指定相應的位元組輸出,由於乙個英文本元只占用乙個位元組,所以對英文本元可以與-c等價,但是占用多個節編碼的字元不適用,比如中文;
檔案內容:
$ cat test.txt
1234567890
abcdefghij
abcdefghij
hello wrold!
指定檔案中每行的第1,3到7個字元輸出:
cut -b 1,3-7 test.txt
134567
acdefg
acdefg
hllo w
-n表示1到前n個字元,n-表示從n開始的所有字元
列印前兩個字元和從第8個開始的字元
$ cut -b -2,8- test.txt
12890
abhij
abhij
herold!
中文:
檔案內容:
$ cat test1.txt
我們好像在哪見過
你記得嗎?
好像那是乙個春天!
列印第1個位元組的結果
$ cut -b 1 test1.txt▒▒
▒亂碼原因:中文乙個字元用兩個以上位元組編碼
-c的用法和-b的用法基本相同,但是-c是以字元進行分割,能更好的提取多位元組編碼的字元。
檔案內容:
$ cat test1.txt
我們好像在哪見過
你記得嗎?
好像那是乙個春天!
列印第1個位元組的結果
我 你
好前面講的-b和-c都是以固定擷取字串,-d和-f結合就可以按照我們規定的方式擷取字串,通過-d來只是以什麼為分隔符,通過-f來指示取第幾項;
基本格式:
cut -d 『指定分隔符』-f 需要第幾項
開啟/etc/passwd檔案取前五行
cat /etc/passwd|head -n 5
root:x:0
:0:root
:/root
:/bin/bash
daemon:x:1
:1:daemon
:/usr/sbin
:/usr/sbin/nologin
bin:x:2
:2:bin
:/bin
:/usr/sbin/nologin
sys:x:3
:3:sys
:/dev
:/usr/sbin/nologin
sync:x:4
:65534
:sync
:/bin
:/bin/sync
觀察發現每一行都有『:』每一項之間通過『:』來分隔,如果想要取第一項可以輸入如下命令:
cat /etc/passwd|head -n
5| cut -d
':'-f
1root
daemon
binsys
sync
php 提取字串中指定內容及將手機號內容替換
1 提取字串中指定之間的內容,並將手機號 身份證等敏感資訊替換為 php程式 str msg 1.4 n 18 basemsgid 0 from 121279488 from sub 0 is muti msg 0 is redirecting 0 method tmsg request msgid...
提取字串substring
substring 方法用於提取字串中介於兩個指定下標之間的字元。語法 stringobject.substring startpos,stoppos 引數說明 注意 1.返回的內容是從 start開始 包含start位置的字元 到 stop 1 處的所有字元,其長度為 stop 減start。2....
python從字串中提取指定內容
我們在做資料處理的時候,會遇到包含多條格式類似的長字串,比如說 recv node1 temperature 26 node1 humidity 48 node2 temperature 36 node2 humidity 48 node3 temperature 24 node3 humidity...