我有这个文件,我想只得到testme =的值,以便我可以做另一个动作。但这会抛出很多线条,实际上还不能让它发挥作用。
#!/bin/bash
for i in $(cat /var/tmp/test.ini); do
# just one output i need: value1
grep testme= $i
done
; comments
testme=value1
; comments
testtwo=value2
答案 0 :(得分:2)
怎么样
#!/bin/bash
grep 'testme=' /var/tmp/test.ini | awk -F= '{ print $2 }'
或者只是使用bash
#!/bin/bash
regex='testme=(.*)'
for i in $(cat /var/tmp/test.ini);
do
if [[ $i =~ $regex ]];
then
echo ${BASH_REMATCH[1]}
fi
done
答案 1 :(得分:2)
我检查了你的代码,问题出在你的for循环中。
你实际读过文件的每一行,然后把它交给grep,这是不正确的。我猜你有很多行有错误,
没有这样的文件或目录
(或类似的东西)。
你应该给grep你的文件名。 (没有for循环)
e.g。
grep "testme=" /var/tmp/test.ini
答案 2 :(得分:1)
grep -v '^;' /tmp/test.ini | awk -F= '$1=="testme" {print $2}'
grep删除注释,然后awk找到变量并打印其值。或者,在一个awk行中同样的事情:
awk -F= '/^\s*;/ {next} $1=="testme" {print $2}' /tmp/test.ini
答案 3 :(得分:1)
这个怎么样?
$ grep '^testme=' /tmp/test.ini | sed -e 's/^testme=//'
value1
我们找到该行然后删除前缀,只留下值。 Grep为我们做了迭代,不需要明确。
答案 4 :(得分:0)
awk可能是正确的工具,但由于这个问题似乎暗示你只想使用shell,你可能想要这样的东西:
while IFS== read lhs rhs; do if test "$lhs" = testme; then # Here, $rhs is the right hand side of the assignment to testme fi done < /var/tmp/test.ini