将bash变量传递给perl one-liners - 需要见解

时间:2014-06-30 15:48:44

标签: perl bash

我是Perl的新手,我一直在玩单行程来完成一些文件操作。我使用Perl来打印从另一个文件中获取的行号之间的段。我目前的问题如下:

export var=10 ; perl -ne 'print $_ if $. == $ENV{var}' filename.txt 

打印第10行,但如果我想从第10行打印到文件末尾,我试过

export var=10 ; perl -ne 'print if $ENV{var} .. -1' filename.txt 

- 失败。生成的输出打印整个文件。此外,以下工作,

export var=10 ; perl -ne 'print if $. >= $ENV{var} $$ $. <= $ENV{var}+5 ' filename.txt

但由于我在处理所需行之后的可变文件长度,因此这不是一个可行的解决方案。

3 个答案:

答案 0 :(得分:3)

Perl触发器操作符有一些自己的瑕疵(比如是我的变量行号或布尔值?),所以如果有疑问,请与$.行号进行明确比较。< / p>

export var=10 ; perl -ne 'print if $.== $ENV{var} .. -1' filename.txt 

答案 1 :(得分:1)

从第10行到文件末尾:

export var=10 ; perl -ne 'print $_ if $. > $ENV{var}' filename.txt

如果您希望它包含第10行:

export var=10 ; perl -ne 'print $_ if $. >= $ENV{var}' filename.txt

答案 2 :(得分:1)

您不需要使用环境变量:

var=10; echo "$(seq 20 35)" | perl -lne 'print if $. >= '"$var"';'
29
30
31
32
33
34
35

看看我的转发方式$var

使用触发器:

var=10; echo "$(seq 20 35)" | perl -lne 'print if $.== '"$var"' .. -1;'
29
30
31
32
33
34
35