Ошибка при выполнении команды sed - PullRequest
0 голосов
/ 28 февраля 2019

Ниже приведена команда sed, которая отлично работает в онлайн-оболочке BASH & KSH, но при попытке запустить ее на сервере Linux выдает ошибку «Недопустимая операция --r».

Я пытаюсь сделатьрегулярное выражение для анализа MFBBMYKLAXXX с первой строки.

echo "{1:F01MFBBMYKLAXXX2474811384}{2:O3001434181108BKKBTHBKBXXX12203020241811081534N}{3:{108:241C182AFFD4403C}}{4:
:15A:
:20:10168957
:22A:NEWT
:94A:BILA
:22C:BKKBBK8308MFBBKL
:82A:BKKBTHBK
:87A:MFBBMYKL
:15B:
:30T:20181108
:30V:20181109
:36:32,8308
:32B:THB2500000,
:53A:/610165
BKKBTHBK
:57A:BKKBTHBK
:33B:USD76148,01
:53A:CHASUS33
:57A:/04058664
BKTRUS33
:58A:MFBBMYKL
:15C:
:24D:ELEC/REUTERS D-3000
-}{5:{CHK:4117CD0206B7}}{S:{COP:S}}
" | sed -rn 's/.*\{1:F01([A-Z]{12}).*/\1/p'

1 Ответ

0 голосов
/ 01 марта 2019

Использование sed -r (или в некоторых диалектах sed -E) является нестандартным и необязательным.

Он выбирает диалект регулярного выражения, называемый расширенными регулярными выражениями, что позволяет вам выразить некоторые вещи более лаконично.

Базовые регулярные выражения POSIX поддерживают в значительной степени те же средства, но с синтаксисом странного шара, в котором вам нужно использовать обратную косую черту для некоторых символов, чтобы получить их особое значение (другими словами, это полностью противоположно тому, что изначально выполнялось с обратной косой чертой).

Так что, если у вас есть расширенное регулярное выражение, такое как a+(b{2})c, то, если ваш sed не поддерживает -r или -E, попробуйте a\+\(b\{2\}\}c без какой-либо специальной опции и надеемся, что ваш sed по крайней мере примерно такой же, как указано в POSIX.(Если вы серьезно относитесь к ретрокомпьютингу, это маловероятно.)

Оригинальная реализация регулярного выражения Кена Томпсона поддерживала только метасимволы регулярных выражений [...] и . и *, а также длядолгое время, это все, что поддерживается sed тоже.

Конечно, вы всегда можете установить более современный sed.Я знаю, что у SunOS были некоторые вкусности в их каталоге xpg4, но я понятия не имею, так ли это в Solaris;если это так, возможно, вам просто нужно добавить /usr/xpg4/bin к вашему PATH.(Согласно это это было верно, по крайней мере, в определенный момент времени.)

...