我想從與該結構的文本解析每個行:外殼:對一個變量用grep用換行
ipv4address: 1.2.3.4/29
ipv4gateway: 1.2.3.1
ipv4mtu: 1500
ipv4dnsserver: 8.8.8.8
ipv4dnsserver: 8.8.4.4
換行符由\n
分隔。
要生成此文件,我用這將輸出一些信息的程序:
CONFIG=$(umbim $DBG -d $device -n -t $tid config) || {
echo "mbim[$$]" "config failed"
return 1
}
然後我寫出來的$ CONFIG變量文件,只需再次重讀它,這似乎是我錯了。
echo "$CONFIG" > /tmp/ip
然後在那之後我用grep
來獲取信息:
IP=$(grep "ipv4address" /tmp/ip |grep -E -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)")
NM=$(grep "ipv4address" /tmp/ip |grep -o '.\{2\}$')
GW=$(grep "ipv4gateway" /tmp/ip |grep -E -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)")
我想避免寫入文件。這會更好,或者至少,如果我可以grep $ CONFIG變量,似乎會更好。但使用echo $CONFIG
將不會產生結果,因爲換行符會被忽略。與printf
相同。
我正在使用busybox,如果有幫助。
BusyBox v1.25.1() built-in shell (ash)
編輯:這是當我想打印出變量與echo
會發生什麼:
$ CONFIG=$(cat /tmp/ip)
$ echo -e $CONFIG
ipv4address: 1.2.3.4/29 ipv4gateway: 1.2.3.1 ipv4mtu: 1500 ipv4dnsserver: 8.8.8.8 ipv4dnsserver: 8.8.4.4
echo -e'也會輸出新行。 –
謝謝,我在幾秒前添加了一個示例。不成功的不幸。 – fsp
不處理'grep | grep',你可以使用:'IP = $(echo「$ CONFIG」| grep「ipv4address」| grep -E ...)'等等'注意''$ CONFIG''周圍的雙引號。你可能無法使用Bash'這裏的字符串',因爲你使用的是BusyBox,但是如果可用的話,它們會保存一個進程。我會看看使用'sed'而不是'grep | grep'。注意[將多行輸出捕獲到bash變量](https://stackoverflow.com/questions/613572/)。 –