[英]Search String using Shell Awk
我有一個字符串:
The disk 'virtual memory' also known as 'Virtual Memory' has exceeded the maximum utilization threshold of 95 Percent.
我需要每次在此字符串詞The disk
進行搜索,如果找到了,那么我只需要提取'*' also known as '*'
短語並將其放在變量MONITOR
換句話說,我想搜索並將其值
MONITOR="'virtual memory' also known as Virtual Memory'"
我如何使用awk
做到這一點?
這是您所描述的代碼片段。 您應該將其放在$(...)
以將其分配給$ MONITOR變量:
$ awk '/The disk '\''.*'\'' also known as '\''.*'\'' has exceeded/ {gsub(/The disk /,"");gsub(/ has exceeded.*$/,"");print}' input.txt
在這種情況下,awk的兩個問題是
gsub()
擺脫行的第一部分和最后一部分的原因。 '\\''
序列對其進行換碼( 此處有更多信息) sed
可能比awk
容易一些:
string="The disk 'virtual memory' also known as 'Virtual Memory' has exceeded the maximum utilization threshold of 95 Percent."
MONITOR=$(echo "$string" | sed -n "/The disk \('[^']*' also known as '[^']*'\) .*/s//\1/p")
如果需要awk
,則:
MONITOR=$(echo "$string" | awk "/The disk '[^']*' also known as '[^']*'/ {
print \$3, \$4, \$5, \$6, \$7, \$8, \$9; } {}')
空括號{}
與任何行匹配,不打印任何內容,因此awk
僅處理與正則表達式匹配的行。 請注意,這假設每個磁盤都有一個帶有兩個單詞的名稱。 您需要使用功能更強大的處理程序(例如gsub
函數)來進行基於正則表達式的替換。 這不是awk
的優勢。 sed
更容易用於該任務。
這兩個命令均設置為處理散布在不匹配行之間的多行數據(但也可以在包含匹配信息的單行上工作)。 僅用引號將引號之間的名稱打印在單獨的行上也不會很困難,這樣以后您就可以進行更少的解剖(以得到兩個以空格分隔的名稱)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.