在转义连字符的同时在标识符之间抓取文本" - "在perl

时间:2016-08-25 17:09:38

标签: perl if-statement

我试图在" A之后抓取一行的文字。 "直到行结束。我试过了:

perl -ne 'print if /A[.] /../\R/' test.txt > test2.txt

我认为" \ R"会匹配一行的结尾。但是,当该行包含连字符" - "时,输出不会在该行的末尾停止,而是打印下一行直到连字符停止。

test.txt 失败的示例行如下:

A. -rw-r-----, -r--------

预期的 test2.txt 输出为:

-rw-r-----, -r--------

我得到以下错误输出:

-rw-r-----, -r--------B. -rw-r--r--, -r--r--r--C. -rw-r--r--, -r--------D. -rw-r--rw-, -r-----r--E. -rw-------, -r--------: C

以下内容:

perl -nle 'print if /A[.] (.*)/' test.txt > test2.txt产生与上面提供的命令相同的结果,但是当连字符存在时,输出仍然没有在行尾结束。

1 个答案:

答案 0 :(得分:0)

我认为你正在寻找

perl -nle'print $1 if /A[.] (.*)/'

您也可以使用

perl -ne'print /A[.] (.*)/s'

perl -ne'print if s/^(.*?)A[.] //'
$ cat test.txt
A. -rw-r-----, -r--------
B. -rw-r-----, -r------w-
C. -rw-r-----, -r------x-
A. -rw-r-----, -r------y-
D. -rw-r-----, -r------z-

$ perl -nle'print $1 if /A[.] (.*)/' test.txt
-rw-r-----, -r--------
-rw-r-----, -r------y-

$ perl -ne'print /A[.] (.*)/s' test.txt
-rw-r-----, -r--------
-rw-r-----, -r------y-

$ perl -ne'print if s/^(.*?)A[.] //' test.txt
-rw-r-----, -r--------
-rw-r-----, -r------y-