我是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
但由于我在处理所需行之后的可变文件长度,因此这不是一个可行的解决方案。
答案 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