* в awk (метасимволы)

El PDP -11 fue fabricado por Digital Equipment Corporation, y los sistemas operativos del fabricante para el PDP -11 fueron:

  • RT -11
  • RSX -11
  • RSTS/ES

De estos, al menos RSTS/E requería otro sistema operativo para generar el sistema. Era una sola -tarea, un solo -sistema operativo de disco de usuario, llamado DOS por supuesto, que admitía poco más que cintas, discos, un teletipo, el sysgenprograma que le hacía preguntas de configuración y creaba un lenguaje ensamblador -archivos de configuración, y un ensamblador y enlazador. El resultado del programa sysgenfue un sistema operativo de arranque RSTS/E. No puedo hablar por RT -11 o RSX -11 porque nunca tuve que sysgen, pero sysgen'd RSTS / E muchas veces a fines de la década de 1970.

Repararon todo eso con RSTS/E versión 6b o posiblemente 6c, que alojaba el programa sysgenen sí mismo, a través de un sistema de tiempo de ejecución RT -11 (y también tenía un sistema de tiempo de ejecución RSX -11 ), pero todo esto había estado ocurriendo desde alrededor de 1968. De ahí el énfasis en que Unix es autosuficiente -.

-1
17.02.2019, 16:57
2 ответа

Вы пропустили часть "пустая строка" в описании *, которая присутствует в каждой строке.

В awk, чтобы сопоставить один или несколько B, используйте/B+/

3
28.04.2021, 23:36

B* соответствует пустой строке. В -будет совпадение между каждым символом в каждой строке.

Вот вам образовательный инструмент:

awk -v re='B+' '{ gsub(re, "(&)"); print }' file

Эта программа awkбудет сопоставлять заданное выражение и заменять каждое совпадение тем, что совпало, но в круглых скобках. Это не идеально, но служит самым простым образовательным целям.

То же самое с sedбыло бы для некоторого расширенного регулярного выражения PATTERN,

sed -E 's/(PATTERN)/(&)/g' file

Выполнение команды awkдля ваших данных с выражениемB+:

$ awk -v re='B+' '{ gsub(re, "(&)"); print }' file
U         8649 275  Asia
Canada    3852 25   North America
China     3705 1032 Asia
USA       3615 237  North America
India     1267 746  -Asia
Mexico    762  78   -North America
France    211  55   Europe
Japan     144  120  Asia
England   94   56   Europe
cim
(B)
(BB)

(BBB)

Как видите, только три строки в нижней части файла содержат верхний -регистр B, так что только они совпадают.

Другой пример, использующий толькоB:

$ awk -v re='B' '{ gsub(re, "(&)"); print }' file
U         8649 275  Asia
Canada    3852 25   North America
China     3705 1032 Asia
USA       3615 237  North America
India     1267 746  -Asia
Mexico    762  78   -North America
France    211  55   Europe
Japan     144  120  Asia
England   94   56   Europe
cim
(B)
(B)(B)

(B)(B)(B)

Здесь каждый Bсопоставляется индивидуально.

И, наконец, ваше фактическое выражение в вопросе (мои данные неправильно разделены табуляцией -), используяB*:

$ awk -v re='B*' '{ gsub(re, "(&)"); print }' file
()U() () () () () () () () () ()8()6()4()9() ()2()7()5() () ()A()s()i()a()
()C()a()n()a()d()a() () () () ()3()8()5()2() ()2()5() () () ()N()o()r()t()h() ()A()m()e()r()i()c()a()
()C()h()i()n()a() () () () () ()3()7()0()5() ()1()0()3()2() ()A()s()i()a()
()U()S()A() () () () () () () ()3()6()1()5() ()2()3()7() () ()N()o()r()t()h() ()A()m()e()r()i()c()a()
()I()n()d()i()a() () () () () ()1()2()6()7() ()7()4()6() () ()-()A()s()i()a()
()M()e()x()i()c()o() () () () ()7()6()2() () ()7()8() () () ()-()N()o()r()t()h() ()A()m()e()r()i()c()a()
()F()r()a()n()c()e() () () () ()2()1()1() () ()5()5() () () ()E()u()r()o()p()e()
()J()a()p()a()n() () () () () ()1()4()4() () ()1()2()0() () ()A()s()i()a()
()E()n()g()l()a()n()d() () () ()9()4() () () ()5()6() () () ()E()u()r()o()p()e()
()c()i()m() ()
(B)
(BB)
()
(BBB)

Это показывает, что B*соответствует в -между каждым символом во всем файле, за исключением прогонов нескольких символов Bближе к концу.

Мы также можем использовать это, чтобы показать разницу между [A-Za-z-]и [A-Za-z-]+(, о которой вы спрашивали меня ранее):

$ awk -v re='[A-Za-z-]' '{ gsub(re, "(&)"); print }' file
(U)         8649 275  (A)(s)(i)(a)
(C)(a)(n)(a)(d)(a)    3852 25   (N)(o)(r)(t)(h) (A)(m)(e)(r)(i)(c)(a)
(C)(h)(i)(n)(a)     3705 1032 (A)(s)(i)(a)
(U)(S)(A)       3615 237  (N)(o)(r)(t)(h) (A)(m)(e)(r)(i)(c)(a)
(I)(n)(d)(i)(a)     1267 746  (-)(A)(s)(i)(a)
(M)(e)(x)(i)(c)(o)    762  78   (-)(N)(o)(r)(t)(h) (A)(m)(e)(r)(i)(c)(a)
(F)(r)(a)(n)(c)(e)    211  55   (E)(u)(r)(o)(p)(e)
(J)(a)(p)(a)(n)     144  120  (A)(s)(i)(a)
(E)(n)(g)(l)(a)(n)(d)   94   56   (E)(u)(r)(o)(p)(e)
(c)(i)(m)
(B)
(B)(B)

(B)(B)(B)
$ awk -v re='[A-Za-z-]+' '{ gsub(re, "(&)"); print }' file
(U)         8649 275  (Asia)
(Canada)    3852 25   (North) (America)
(China)     3705 1032 (Asia)
(USA)       3615 237  (North) (America)
(India)     1267 746  (-Asia)
(Mexico)    762  78   (-North) (America)
(France)    211  55   (Europe)
(Japan)     144  120  (Asia)
(England)   94   56   (Europe)
(cim)
(B)
(BB)

(BBB)
3
28.04.2021, 23:36

Теги

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