Использование разреза с непечатаемыми разделителями

Можно ли использовать вырез и иметь непечатаемые символы в качестве разделителя? Например, я хотел бы, чтобы символы "^ A" (также представленные как \001) были разделителем.

Ответ 1

Если вы используете Bash,

cut -d $'\001' ...

работает (см. Bash Справочное руководство № 3.1.2.4 Котировка ANSI-C).

Другие (более портативные) опции,

cut -d `echo -e '\001'` ...

FS=`echo -e '\001'`
cut -d $FS ...

или вставляя управляющий символ напрямую, используя ^ V, как упоминалось Alnitak и etlerant, в командной строке оболочки, а в редакторах, таких как vi, это означает, что "не обрабатывайте следующее, что я печатаю специально".

Ответ 2

Да, это вполне возможно.

Если вы вводите текст в оболочку, нажмите ^V, а затем ^A, чтобы вставить ^A verbatim в текущей строке, вместо того, чтобы обработать ее как обычную команду "перейти к началу строки":

% cat -v foo
abc^Adef^Aghi
% cut -d^A -f2 foo
def

Ответ 3

CTRL-V CTRL-A?

Ответ 4

Если, например, вы непечатаете разделитель tab, который эквивалентен \t, и вы хотите найти второй для конечного элемента каждой строки, разделенный вкладкой, вы можете использовать это:

cut -d $'\t' -f2- tablimited.csv