我想通过bash“解析”一个文本文件,并希望通过这样做来保存几个变量。
目前我的代码如下:
#!/bin/bash
#set -x
#vlantag=""
#servername=""
kdip=""
#swport=""
cat test|while read line; do
if [[ -z $kdip ]]; then
kdip=$(echo $line | grep Kunden-IP-Adresse |
grep 4948 | cut -d":" -f2 | tr -d ";" |
sed 's/^[ \t]*//;s/[ \t]*$//')
fi
#echo $kdip;
done
echo $kdip
我想要做的是逐行grep,保存像kdip全局的东西,稍后使用这些变量来使用它们来填充另一个文本文件。事情是,我的最后一个回声是空的。 kdip仅在“while-loop”中有效。如何使kdip的值永久化?
答案 0 :(得分:3)
你的基本上是http://mywiki.wooledge.org/BashFAQ/024的变体,但整个脚本将受益于大量的重构,这也巧合地消除了这个问题。
kdip=$(awk -F ':' '/Kunden-IP-Adresse/ && /4948/ {
k=$2; gsub(/;/,"",k) gsub(/^[ \t]+|[ \t]+$/,"",k);
print k; exit(0) }' test)
如果你想要提取更多变量,只需让Awk脚本计算它们并以合适的形式写出来 - 在最坏的情况下,你可以从shell中eval
但是如果这些值适合机器读取,则类似
set -- $(awk stuff ...)
kdip=$1
servername=$2
可以很好地工作 - 只需确保Awk脚本输出kdip
值作为第一个字段,服务器名称输出等等。