SED - char 4: unterminated `s 'command

Источник проблемы в разделителе $1," ",$2.

Из документации:

Многомерные массивы поддерживаются в awk посредством конкатенации индексы в одну строку. awk преобразует индексы в строки (см. Преобразование) и объединяет их вместе с разделителем между их. Это создает одну строку, описывающую значения отдельные индексы. Объединенная строка используется как единый индекс в обычный одномерный массив. В качестве разделителя используется значение встроенная переменнаяSUBSEP


SUBSEP
Разделитель нижнего индекса. Он имеет значение по умолчанию "\034" и используется для разделения частей индексов многомерный массив. Таким образом, выражение ‘foo["A", "B"]’ на самом деле обращается к foo["A\034B"]


Стандартный awk моделирует многомерные массивы, разделяя значения нижнего индекса запятыми. Значения объединяются в одну строку, разделенную значением SUBSEP.
Тот факт, что такой индекс был создан таким образом, не сохраняется; таким образом, изменение SUBSEPможет иметь неожиданные последствия.

1
07.03.2017, 18:42
2 ответа

Похоже, sed не очень хорошо работает с двоичными подстановками. Я только что проверил, что вы делаете с tr , хотя, похоже, он работает. На самом деле это довольно просто сделать с помощью одной команды, а также:

cat /path/to/file1 | tr "$(printf "\302\240")" " " > /path/to/file1_new

tr - это инструмент для «перевода» набора символов в его первом аргументе в набор во втором аргументе (который расширен, чтобы соответствовать длине первый комплект при необходимости). Поэтому мы просто переводим каждый символ в пробел, как вы пытались сделать с sed .

0
28.01.2020, 01:00

Обратите внимание, что вы можете обращаться к восьмеричным/шестнадцатеричным числам непосредственно в sed как:

sed -e 's/\o302/ /g'  #in octal
sed -e 's/\xC2/ /g'   #in hex
0
28.01.2020, 01:00

Теги

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