-1

我有这个文件,我只想得到 testme= 的值,这样我就可以做另一个动作。但这会引发很多行,实际上还不能让它工作。

1.test.sh

#!/bin/bash
for i in $(cat /var/tmp/test.ini); do
  # just one output i need: value1
  grep testme= $i 
done

2. /var/tmp/test.ini

; comments
testme=value1
; comments
testtwo=value2
4

5 回答 5

1

怎么样

#!/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
于 2011-10-17T12:56:35.703 回答
1

我检查了你的代码,问题出在你的 for 循环中。

您实际上读取了文件的每一行,并将其提供给 grep,这是不正确的。我猜你有很多错误的行,

没有相应的文件和目录

(或类似的东西)。

你应该给 grep 你的文件名。(没有 for 循环)

例如

grep "testme=" /var/tmp/test.ini
于 2011-10-17T12:57:55.257 回答
0
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 
于 2011-10-17T12:54:05.763 回答
0

这个怎么样?

$ grep '^testme=' /tmp/test.ini  | sed -e 's/^testme=//' 
value1

我们找到该行,然后删除前缀,只留下值。Grep 为我们进行迭代,无需明确。

于 2011-10-17T12:54:42.727 回答
0

awk is probably the right tool for this, but since the question does seem to imply that you only want to use the shell, you probably want something like:

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
于 2011-10-18T10:19:25.373 回答