Linux命令系列12 文字替換和資料流處理

2021-07-16 17:37:12 字數 2969 閱讀 5756

學習基本的linux命令操作,對於我們熟悉linux或者unix系統還是很有幫助的。

首處替換#sed 's/text/replace_text/' file   //替換每一行的第一處匹配的text

全域性替換#sed 's/text/replace_text/g' file

預設替換後,輸出替換後的內容,如果需要直接替換原檔案,使用-i:

sed -i 's/text/repalce_text/g' file

移除空白行#sed '/^$/d' file

echo this is en example | sed 's/\w+/[&]/g'

$>[this]  [is] [en] [example]

子串匹配標記

第乙個匹配的括號內容使用標記 1 來引用#sed 's/hello\([0-9]\)/\1/'

雙引號求值

sed通常用單引號來引用;也可使用雙引號,使用雙引號後,雙引號會對表示式求值:

sed 's/$var/hlloe/'

其它示例

字串插入字元:將文字中每行內容(abcdef) 轉換為 abc/def:

sed 's/^.\/&\//g' file

awk ' begin statements2 end '

工作方式

1.執行begin中語句塊;

2.從檔案或stdin中讀入一行,然後執行statements2,重複這個過程,直到檔案全部被讀取完畢;

3.執行end語句塊

print 列印當前行

使用不帶引數的print時,會列印當前行

#echo -e "line1\nline2" | awk 'begin end'

print 以逗號分割時,引數以空格定界;

echo | awk ' '

$>v1 v2 v3

特殊變數: nr nf $0 $1 $2

nr:表示記錄數量,在執行過程中對應當前行號;

nf:表示字段數量,在執行過程總對應當前行的字段數;

$0:這個變數包含執行過程中當前行的文字內容;

$1:第乙個欄位的文字內容;

$2:第二個欄位的文字內容;

echo -e "line1 f2 f3\n line2 \n line 3" | awk ''

列印每一行的第二和第三個欄位#awk '' file

統計檔案的行數#awk ' end ' file

累加每一行的第乙個字段

echo -e "1\n 2\n 3\n 4\n" | awk 'begin end '

傳遞外部變數

var=1000

echo | awk '' vara=$var #  輸入來自stdin

awk '' vara=$var file # 輸入來自檔案

用樣式對awk處理的行進行過濾

awk 'nr < 5' #行號小於5

awk 'nr==1,nr==4 ' file #行號等於1和4的列印出來

awk '/linux/' #包含linux文字的行(可以用正規表示式來指定,超級強大)

awk '!/linux/' #不包含linux文字的行

讀取命令輸出--使用getline,將外部shell命令的輸出讀入到變數cmdout中:

echo | awk ''

在awk中使用迴圈

for(i=0;i<10;i++)

for(i in array)

$echo '2015_04_02 20:20:08: mysqli connect failed, please check connect info'|awk -f':' ''

>2015_04_02 20:20:08   # 這種方式滿足需求

而如果需要將後面的部分也列印出來(時間部分和後文分開列印):

$echo '2015_04_02 20:20:08: mysqli connect failed, please check connect info'|awk -f':' ''

>2015_04_02 20:20:08

>mysqli connect failed, please check connect info

wk結合grep找到指定的服務,然後將其kill掉

ps -fe| grep msv8 | grep -v mforward | awk '' | xargs kill -9;

awk實現head、tail命令

head#awk 'nr<=10' filename

tail#awk ' end } ' filename

列印指定列

awk方式實現 #ls -lrt | awk ''

cut方式實現#ls -lrt | cut -f6

列印指定文字區域

確定行號

seq 100| awk 'nr==4,nr==6'

確定文字

列印處於start_pattern 和end_pattern之間的文字:

#awk '/start_pattern/, /end_pattern/' filename

確定文字--列印處於start_pattern 和end_pattern之間的文字:

seq 100 | awk '/13/,/15/'

cat /etc/passwd| awk '/mai.*mail/,/news.*news/'

awk常用內建函式

index(string,search_string):返回search_string在string中出現的位置

sub(regex,replacement_str,string):將正則匹配到的第一處內容替換為replacement_str;

match(regex,string):檢查正規表示式是否能夠匹配字串;

length(string):返回字串長度

echo | awk ''

printf 類似c語言中的printf,對輸出進行格式化:

seq 10 | awk ''

例項048文字查詢與替換

返回乙個整數,該整數指定乙個字串在另乙個字串中的第乙個匹配項的起始位置。如果找到了匹配項,則該整數是從 1 開始的索引。如果未找到匹配項,則函式返回零。控制項屬性值控制項 屬性值textbox name txttext button name btnsearch multiline true tex...

Linux命令列(三)文字編輯命令Vi

今天在修改ssh配置的時候,遇到了vi命令。通過vi etc ssh sshd config開啟ssh 配置後,發現出不來了,游標只能上下移動,無法進行輸入,就趕緊查詢了資料,重新認識了vi命令。1.three models command model 命令列模式 通過esc可以返回命令列模式 te...

NLP系列文章(三) 文字向量的表示方法

雖然one hot和tf idf的表示方式也成為詞向量,但是我們這裡討論的基於詞向量的表示方式是圍繞分布式詞表徵進行的。也就是利用word2vec glove和fasttext等詞向量對文字進行表示,詞向量可以根據任務或者資源的不同隨意選擇,文字表示的方法是通用的。首先我們根據語料庫訓練詞向量,也就...