我有一个变量,我必须从中 grep %% 中间的 which 和以 $$ 开头的单词。我使用 split 它有效......但仅适用于某些情况。
例子:
#!/usr/bin/perl
my $lastline ="%Filters_LN_RESS_DIR%\ARC\Options\Pega\CHF_Vega\$$(1212_GV_DATE_LDN)";
my @lastline_temp = split(/%/,$lastline);
print @lastline_temp;
my @var=split("\\$\\$",$lastline_temp[2]);
print @var;
我得到了预期的 o/p。但是我可以使用 Grep 命令获得相同的结果吗?我的意思是我不想使用 array[2]
或 array[1]
。这样我就可以轻松地替换这些值。
最佳答案
我真的不知道如何才能获得预期的输出。因为您将数据放在“忙”引号中(插值、双引号……),所以它被存储为:
'%Filters_LN_RESS_DIR%ARCOptionsPegaCHF_Vega$01212_GV_DATE_LDN)'
- 参见 Quote and Quote-like Operators也许阅读 Interpolation in Perl
- 请注意反斜杠不见了。内插引号中的反斜杠仅表示“将下一个字符视为文字”,因此您得到文字
'A'
、文字'O'
、文字'P'
, .... '0'
是$(
(又名$REAL_GROUP_ID
)的值,您无意中要求它插入。所以有没有'$$'
split 序列。
您可以使用 grep
命令获得相同的结果吗?这取决于什么是“相同”。您将结果保存在数组 中,grep
的目的是从数组中排除一些东西。如果您使用非平凡的 grep,您将既没有数组,也没有数组的输出:grep {; 1 } @数据
。
实际上你可以用这个正则表达式得到完全相同的结果,假设 @vars
中的单个字符串是“结果”。
m/%([^%]*)$/
当然,仅此而已
substr( $lastline, rindex( $lastline, '%' ) + 1 );
它的运行速度可以提高 8-10 倍。
关于linux - 如何在 %% 或 $$ 中间 grep/split 一个词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11433225/