Как использовать sed для замены слова в файле управляющими символами

[Это основано на ваших -текущих -примерных данных, разделенных пробелами]

Вы можете использовать срез массива в perl, выбирая индексы, используя grepи некоторую арифметику по модулю:

perl -anle 'print join "\t", $F[0], @F[grep { !($_ % 4 - 1) } 1..$#F]' file
-1
12.10.2018, 21:39
2 ответа

Кажется, у меня работает:

$ echo -n "^Aword^B" | sed 's/^Aword^B/^Alexical unit^B/' | hexdump -C
00000000  01 6c 65 78 69 63 61 6c  20 75 6e 69 74 02 0a     |.lexical unit..|
0000000f

01представляет собой ^A; 02представляет ^B.

Имейте в виду, что я использовал буквальные управляющие символы, а не знак вставки (^), за которым следует Aили B. Чтобы ввести их при создании команды sed, используйте Ctrl-V , а затем управляющий символ, чтобы вставить его буквально, а не readlineанализировать его как ввод.

Другими словами, чтобы вставить ^A, нажмите Ctrl-V , а затем Ctrl-A , и вы увидите, что ^Aотображается как ваш Вход. Если вы попытаетесь пройти мимо этого, вы заметите, что ваш курсор всегда рассматривает это как единое целое, даже если оно состоит из двух символов на вашем экране.

1
28.01.2020, 05:08

В GNU sed \xHHработает:

$ printf '\001foo\002\n' | sed 's/\x01foo\x02/\x01bar\x02/g' | od -c
0000000 001   b   a   r 002  \n

Если у вас нет GNU sed, но есть Bash, вы можете использовать кавычки $''для генерации управляющих символов в оболочке:

$ printf '\001foo\002\n' | sed $'s/\x01foo\x02/\x01bar\x02/g' | od -c
0000000  001   b   a   r 002  \n        

Если у вас нет ни того, ни другого, всегда есть Perl, который тоже понимает\xHH:

$ printf '\001foo\002\n' | perl -pe 's/\x01foo\x02/\x01bar\x02/g' | od -c
0000000  001   b   a   r 002  \n

Конечно, вы можете сделать то же самое с -i.

1
28.01.2020, 05:08

Теги

Похожие вопросы