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



我试图抓取"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产生与上面提供的命令相同的结果,但是当存在连字符时,输出仍然没有在行尾结束。

我想你在找

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-

最新更新