Как с помощью sed или tr удалить такие строки, как «[цифры]»?

В моем случае это было вызвано отсутствием пакета. К сожалению, вам нужно будет использовать sudo для его установки;)Я бы рекомендовал sudo su, затемapt install libnss-myhostname

-121 ---104381 ​​-

"Или возможно ли, что я действительно получил какой-либо руткит, хотя ни один из этих проверок "известные руткиты" не был отмечен красным "найден"?"

Да, есть много неизвестных руткитов...

Если бы это была чистая установка с проверенного источника CD/DVD, я бы исследовал руткиты прошивки.

Удачи, приятель.

2
26.02.2021, 10:35
3 ответа

Попробуйте это:

# it also removes the extra spaces
$ sed -e 's/\[[0-9–]*\]//g;s/[[:blank:]]\+/ /g;s/[[:blank:]]\([\.?!:;,]\+\)/\1/g' file

Выход:

Local delivery of a wide selection of growth factors (e.g. platelet-derived growth factor and bone morphogenetic proteins, for example) from electrospun membranes/scaffolds has demonstrated to enhance cell activity in vitro as well as bone regeneration in vivo. Due to space limitations, the authors recommend that readers refer to the outstanding reviews recently published on this topic for further details

1
18.03.2021, 22:28

Вам нужно сопоставить [, затем одну или несколько цифр, затем ].

  • [и ]считаются специальными символами в регулярных выражениях, поэтому перед ними необходимо использовать обратную косую черту
  • Цифра может быть представлена ​​как [0-9]или как[[:digit:]]
  • Вам нужно несколько цифр, поэтому используйте +, чтобы указать одну или несколько

Так

sed -E 's/\[[[:digit:]]+\]//g'

Чтобы соответствовать диапазону чисел, такому как [34–36]в вашем примере, вам нужно немного расширить шаблон, [цифр цифр ]. (Обратите внимание, что тире выглядит не как стандартный дефис, а как более длинноекороткое тиреили, возможно, дажедлинное тире.)

sed -E 's/\[[[:digit:]]+–[[:digit:]]+\]//g'

Чтобы сопоставить оба из них одновременно, вам нужно сделать тире и второе число необязательными, поместив их в скобки (... )и объявив это так с помощью?

sed -E 's/\[[[:digit:]]+(–[[:digit:]]+)?\]//g'

Я использовал sed -Eповсюду для обозначения расширенных регулярных выражений (ERE ), что означает, что больше символов являются неявно специальными и не нуждаются в маркировке обратной косой чертой.

1
18.03.2021, 22:28

Сperl:

perl -Mopen=locale -pe 's/\h*\[\d+(\p{dash}\d+)?\]//g' < your-file

Где \p{dash}соответствует символам в пунктуации тире категории (, например -֊־᐀᠆-‑‒–—―⁓⁻₋−⸗⸚⸺⸻⹀〜〰゠ ︱︲﹘﹣- ).

Это удаляет hгоризонтальные пробелы перед , но не после те [x]. Однако это означает, что в вашем образце in vivo [47]. Dueстановится in vivo. Due. Вы можете улучшить его, также удалив горизонтальные пробелы после и [x], если за ним в конечном итоге следует !;:,.?или конец строки с:

perl -Mopen=locale -pe 's/\h*\[\d+(\p{dash}\d+)?\](\h*(?=[!;:,.?]|$))?//g'

С помощью -Mopen=localeсимволы декодируются/кодируются в соответствии с локалью charmap. Категории (тире, цифра, пробел над )определяются на основе данных Unicode. Список символов, которым соответствует каждый, будет зависеть от версии perl (, которая определяет используемую версию Unicode ). Например, здесь и в локали, использующей кодировку UTF -8, \dсоответствует0123456789٠١٢٣٤٥٦٧٨٩۰۱۲۳۴۵۶۷۸۹߀߁߂߃߄߅߆߇߈߉०१२३४५६७८९০১২৩৪৫৬৭৮৯੦੧੨੩੪੫੬੭੮੯૦૧૨૩૪૫૬૭૮૯୦୧୨୩୪୫୬୭୮୯௦௧௨௩௪௫௬௭௮௯౦౧౨౩౪౫౬౭౮౯೦೧೨೩೪೫೬೭೮೯൦൧൨൩൪൫൬൭൮൯෦෧෨෩෪෫෬෭෮෯๐๑๒๓๔๕๖๗๘๙໐໑໒໓໔໕໖໗໘໙༠༡༢༣༤༥༦༧༨༩၀၁၂၃၄၅၆၇၈၉႐႑႒႓႔႕႖႗႘႙០១២៣៤៥៦៧៨៩᠐᠑᠒᠓᠔᠕᠖᠗᠘᠙᥆᥇᥈᥉᥊᥋᥌᥍᥎᥏᧐᧑᧒᧓᧔᧕᧖᧗᧘᧙᪀᪁᪂᪃᪄᪅᪆᪇᪈᪉᪐᪑᪒᪓᪔᪕᪖᪗᪘᪙᭐᭑᭒᭓᭔᭕᭖᭗᭘᭙᮰᮱᮲᮳᮴᮵᮶᮷᮸᮹᱀᱁᱂᱃᱄᱅᱆᱇᱈᱉᱐᱑᱒᱓᱔᱕᱖᱗᱘᱙꘠꘡꘢꘣꘤꘥꘦꘧꘨꘩꣐꣑꣒꣓꣔꣕꣖꣗꣘꣙꤀꤁꤂꤃꤄꤅꤆꤇꤈꤉꧐꧑꧒꧓꧔꧕꧖꧗꧘꧙꧰꧱꧲꧳꧴꧵꧶꧷꧸꧹꩐꩑꩒꩓꩔꩕꩖꩗꩘꩙꯰꯱꯲꯳꯴꯵꯶꯷꯸꯹0123456789(всем десятичным цифрам в том или ином скрипте ).

Если вы хотите сопоставить только десятичные цифры ASCII 0123456789, вы можете добавить флаг aк замене sили заменить \dна [0-9](, иначе это не должно влиять на пробел или пунктуация тире соответствует )или вы можете явно указать список символов([0123456789]для цифр или [\t\N{SPACE}\N{NO-BREAK SPACE}]для пробелов или [\N{HYPHEN-MINUS}\N{EN DASH}\N{EM DASH}]для тире например ).

Если вы не знаете, что такое символ, вы можете, например, printf %s '–' | uconv -x name, чтобы узнать его имя Unicode, или использовать perlнапрямую (, что позволит избежать проблем, связанных с различными версиями Unicode, используемыми perlиuconv(ОКУ)):

perl -Mcharnames=full -Mopen=locale -lpe '
    s/[^ -~]/"\\N{". charnames::viacode(ord($&)). "}"/ge' < your-file

Что по вашему [34–36]дает:[34\N{EN DASH}36].

3
18.03.2021, 22:28

Теги

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