[英]Extract substring from string with sed
我想從snmpwalk輸出中提取MIB對象。 輸出FILE
如下所示:
RFC1213-MIB::sysDescr.0.0.0.0.192.168.1.2 = STRING: "Linux debian 3.16.0-4-amd64 #1 SMP Debian 3.16.43-2+deb8u1 (2017-06-18) x86_64"
RFC1213-MIB::sysObjectID.0 = OID: RFC1155-SMI::enterprises.8072.3.2.10
..
首先,我讀取輸出文件,將其分割為character =
並刪除RFC1213-MIB::
和.0
之間的所有內容,直到字符串結尾。
while read -r; do echo "${REPLY%%=*}" | sed -e 's/RFC1213-MIB::\(.*\)\.0/\1/'; done <$FILE
我當前的輸出:
sysDescr.0.0.0.192.168.1.2
sysObjectID
如何刪除其他值? 有更好的解決方案,提取sysDescr
, sysObjectID
嗎?
使用awk:
awk -F[:.] '{print $3}'
(將:
和.
定義為字段分隔符,並顯示第三個字段)
與sed(Gnu):
sed 's/^[^:]*::\|\.0.*//g'
(用空字符串替換所有這不是一個:
接着::
在該行或第一開始.0
和以下字符到行的結尾)
也許您可以嘗試:
sed 's/RFC1213-MIB::\([^\.]*\).*/\1/' $FILE
這將得到RFC1213-MIB::
字符串后不是點( .
)的所有內容。
如果您不想使用sed,則可以使用參數替換。 sed是一個外部過程,因此它不像參數替換那樣快,因為它是內置的bash。
while IFS= read -r line; do line=${line#*::}; line=${line%%.*}; echo $line; done < file
line=${line#*::}
假定RFC1213-MIB
沒有兩個冒號,並且將從sysDescr
拆分為兩個冒號。
line=${line%%.*}
假設sysDescr
會有一個.
之后。
如果您有更多示例,認為您無法使用,我可以更新答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.