一旦在shell脚本中找到匹配的出口



我正在从shell脚本中查找文本文件中的匹配项,并获得所需的输出

文本文件的格式如下:

var1 = X
var2 = X
var3 = X
var4 = BDH

我的shell脚本现在是这样的

values=$(grep -hnr -A2 "$another_value_to_match" exemple.txt | cut -d "=" -f2)
find_all_values=$(ls -d $DIR/["$values"]* | xargs -n 1 basename)

another_value_to_match是我从另一个函数中获取的变量,应包含(var1、var2、var3、var4(。find_all_values正在尝试在大文件夹中查找以(X、B、D或H(开头的子文件夹。

我的问题是,如果another_value_to_match=var4,一切都很好,工作正常,因为这是文本文件中的最后一行,但如果another_vvalue_to_match==var1或我作为输出获得的任何其他值:X X BDH

我的问题是:无论是在文本文件的第一行还是最后一行,找到匹配项后如何停止?如果

if (another_value_to_match == var2)
values=$(grep -hnr -A2 "$another_value_to_match" exemple.txt | cut -d "=" -f2 | add_something_to_pipe)
echo $values
values == X

这个怎么样:

another_value_to_match="var1"
sed -n "/$another_value_to_match *=/{s:^.*=::;p;q}" example.txt

说明:

  • sed -n-使用选项-n运行sed(非自动打印(
  • /$another_value_to_match *=/-查找包含该文本的行
  • s:^.*=::-删除=(含(之前的所有内容
  • p;q-打印,然后退出sed

如果您需要获得最后一个值,那么运行tac以获得相反的结果:

tac example.txt | sed -n "/$another_value_to_match *=/{s:^.*=::;p;q}"

(抱歉我英语不好(

你没有得到你所想的。指令

cut -d "=" -f2

是在"="作为参数,包括前导空格字符。你应该使用

awk -v testor="$another_value_to_match" '{ if( $1 == testor ){ print $3 } }'

awk -v testor="$another_value_to_match" '{ if( $1 == testor ){ print $NF } }'

为了只得到所需字符串/值的干净返回,假设该值是单个字符串

如果值是多字符串,事情会变得更复杂,但我认为这会让你思考过程朝着正确的方向工作。

相关内容

  • 没有找到相关文章

最新更新