Можно ли использовать строку в качестве разделителя в команде Unix cut?

если я хочу вырезать список текста, используя строку в качестве разделителя, это возможно? Например, у меня есть каталог, где список скриптов оболочки вызывает тот же скрипт perl say

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 it states

delim может быть многобайтовым символом.

что я делаю / интерпретирую неправильно здесь?

5 ответов


когда я читаю man for cut it states ... 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

почему бы не использовать grep abc.pl | awk '{print , }'?


попробуйте использовать эту.

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

- F fs --field-separator fs используйте fs для входного разделителя полей (значение предопределенной переменной FS).


$ grep abc.pl * / cut-d' ' - f3-999

в этом случае просто используйте символ пробела в качестве разделителя.


или вы можете попробовать, например, Ruby:

grep abc.pl * | ruby -ne 'p $_.chomp.split("abc.pl").last'