21

如果我想使用字符串作为分隔符来剪切文本列表,这可能吗?例如,我有一个目录,其中一个 shell 脚本列表调用相同的 perl 脚本说

abc.pl

所以当我这样做的时候

$grep abc.pl * 

在那个目录中,它给了我以下结果

xyz.sh: abc.pl 1 2
xyz2.sh: abc.pl 2
mno.sh: abc.pl 3
pqr.sh: abc.pl 4 5

我基本上想要“abc.pl”之后的所有输出(检查现在将哪些范围参数传递给perl)

当我尝试

$grep abc.pl * | cut -d'abc.pl' -f2

或者

$grep abc.pl * | cut -d'abc\.pl' -f2

它给了我

cut: invalid delimiter

当我读 man for cut 时,它说

delim 可以是多字节字符。

我在这里做什么/解释错了?

4

5 回答 5

27

尝试使用这个。

$grep abc.pl * | awk -F 'abc.pl' '{print $2}'

-F fs --field-separator fs 使用 fs 作为输入字段分隔符(FS 预定义变量的值)。

于 2017-05-17T20:35:29.353 回答
10

当我阅读 man for cut 时,它声明 ... delim 可以是多字节字符。

多字节,但只有一个字符,而不是字符串。

canti:~$ ll | cut --delimiter="delim" -f 1,2
cut: the delimiter must be a single character
Try `cut --help' for more information.

canti:~$ cut --version  
cut (GNU coreutils) 5.97

您只能将输出分隔符指定为字符串(在这种情况下无用):

 --output-delimiter=STRING                                                          
        use STRING as the output delimiter the default is to use the input delimiter
于 2009-05-13T11:12:28.817 回答
7

为什么不使用grep abc.pl | awk '{print $3, $4}'

于 2009-05-13T10:56:55.177 回答
0

$ grep abc.pl * | 剪切-d''-f3-999

在这种情况下,只需使用空格字符作为分隔符。

于 2009-05-13T11:17:41.320 回答
0

或者你可以试试 Ruby:

grep abc.pl * | ruby -ne 'p $_.chomp.split("abc.pl").last'
于 2016-11-15T10:50:56.157 回答