我一直试图使用单词边界grep一个确切的shell'变量',
grep "\<$variable\>" file.txt
但未设法;我已经尝试了其他一切但没有成功。
实际上我正在从Perl脚本调用grep
:
$attrval=`/usr/bin/grep "\<$_[0]\>" $upgradetmpdir/fullConfiguration.txt`
$_[0]
和$upgradetmpdir/fullConfiguration.txt
包含一些匹配的“文字”。
但操作后$attrval
为空。
答案 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