我怎样才能从shell变量中获取值?

时间:2010-02-16 17:13:53

标签: perl shell grep

我一直试图使用单词边界grep一个确切的shell'变量',

grep "\<$variable\>" file.txt

但未设法;我已经尝试了其他一切但没有成功。

实际上我正在从Perl脚本调用grep

$attrval=`/usr/bin/grep "\<$_[0]\>" $upgradetmpdir/fullConfiguration.txt`

$_[0]$upgradetmpdir/fullConfiguration.txt包含一些匹配的“文字”。

但操作后$attrval为空。

8 个答案:

答案 0 :(得分:4)

@OP,你应该在Perl中做'grepping'。除非没有选择,否则不要不必要地调用系统命令。

$mysearch="pattern";
while (<>){
 chomp;
 @s = split /\s+/;
 foreach my $line (@s){
    if ($line eq $mysearch){
      print "found: $line\n";
    }
 }
}

答案 1 :(得分:1)

我在这里没有看到问题:

file.txt的:

hello
hi
anotherline

现在,

mala@human ~ $ export GREPVAR="hi"
mala@human ~ $ echo $GREPVAR
hi
mala@human ~ $ grep "\<$GREPVAR\>" file.txt 
hi

究竟什么不适合你?

答案 2 :(得分:1)

并非每个grep都支持ex(1)/ vi(1)字边界语法。

我想我会这样做:

grep -w "$variable" ...

答案 3 :(得分:0)

tcsh中使用单引号适用于我:

grep '<$variable>' file.txt

我假设您的输入文件包含文字字符串:<$variable>

答案 4 :(得分:0)

如果variable=foo你试图grep代表“foo”?如果是这样,它对我有用。如果您要为名为“$ variable”的变量尝试grep,请将引号更改为单引号。

答案 5 :(得分:0)

在最近的Linux上它按预期工作。可以试试egrep而不是

答案 6 :(得分:0)

说你有

$ cat file.txt
This line has $variable
DO NOT PRINT ME! $variableNope
$variable also

然后使用以下程序

#! /usr/bin/perl -l

use warnings;
use strict;

system("grep", "-P", '\$variable\b', "file.txt") == 0
  or warn "$0: grep exited " . ($? >> 8);

你会得到

的输出
This line has $variable
$variable also

它使用与Perl正则表达式匹配的-P switch to GNU grep。该功能仍处于试验阶段,因此请谨慎使用。

另请注意使用绕过shell引用的system LIST,允许程序使用Perl的引用规则而不是shell来指定参数。

您可以使用-w(或--word-regexp)开关,如

system("grep", "-w", '\$variable', "file.txt") == 0
  or warn "$0: grep exited " . ($? >> 8);

得到相同的结果。

答案 7 :(得分:0)

使用单引号它不会工作。你应该去双引号

例如:

this wont work
--------------
for i in 1
do
grep '$i' file
done

this will work
    --------------
    for i in 1
    do
    grep "$i" file
    done