Удаление слов, в строке которых отсутствует определенный символ?

Es porque tiene su VM configurada en "Solo host" para el tipo de red. Esto crea una NIC virtual para su sistema operativo host y configura una subred privada, lo que permite la comunicación entre el host y la VM, pero eso es todo.

Desea configurar su VM como red "puenteada" -esto la adjuntará a la NIC del host y permitirá que su enrutador proporcione una dirección a su VM a través de DHCP. Será como cualquier otra computadora en su red.

Tenga en cuenta que en algunos entornos corporativos/escolares, así como en hoteles, centros de conferencias, cibercafés, etc., algunas configuraciones bloquearán varias direcciones IP en un "puerto" o bloquearán varias direcciones MAC detrás de un "puerto".

1
24.07.2019, 19:01
4 ответа

Использованиеgrep:

grep -oE '\w+\.\w+'

\w+-Соответствует любому символу слова (, равному[a-zA-Z0-9_])
+-Квантификатор — Соответствует от одного до неограниченного количества раз, столько раз, сколько возможно, возвращая по мере необходимости (жадный)
\.-Соответствует символу .буквально (с учетом регистра)

Опция -oдля grepговорит, что нужно возвращать только совпадение, опция -Eразрешает расширенное регулярное выражение.

По существу, это будет соответствовать любому слову или сочетанию слов, содержащих точку.

$ echo 'foo bar Testy.mctestface 1337 taco' | grep -oE '\w+\.\w+'
Testy.mctestface

Если ваше слово может содержать специальные символы, вы можете использовать что-то вроде:

grep -oE '\S+\.\S+'

\S+будет соответствовать любому не -пробельному символу от одного до неограниченного количества раз.

2
27.01.2020, 23:15

Возможно:

sed '
  s/.*/ & /
  :1
    s/ [^.]\{1,\} / /g
  t1
  s/^ //;s/ $//'
1
27.01.2020, 23:15

Помимо grep или sed , вы можете использоватьawk:

{
  for(i=1; i <= NF; i++)
        if ($i ~ /\./)
                out=out" "$i
  print out
  out=""
}

... для сохранения в файл и запуска через awk -f thatfile input1 input2...или:

awk '{ for(i=1; i <= NF; i++) if ($i ~ /\./) out=out" "$i; print out; out="" }' input

... чтобы поместить скрипт в командную строку -.

Awk автоматически разделяет каждую строку ввода для вас на основе пробелов (значения по умолчанию его специальной FSпеременной ). Сценарий перебирает каждое результирующее поле этого разделения и запускает тест :, если значение этого поля содержит точку (, экранированную, поскольку точка — это специальный токен в регулярных выражениях ), а затем добавляет это поле (. ] с пробелом )в новую строку, которую мы выведем в конце. Это приводит к пропуску полей, не содержащих точку. Как только цикл по полям завершен, мы печатаем это восстановленное значение (вout)и сбрасываем его на пустую строку, если во входных данных есть больше строк.

1
27.01.2020, 23:15

Немного упрощенная версия ответа awk:

awk '{ for (i=1; i<=NF; i++) if ($i !~ /\./) $i = ""; print; }'

Для каждого слова, если оно не содержит точку, вычеркнуть его. Затем распечатайте то, что осталось.


Перечитав вопрос, я вижу, что в нем говорится «каждое слово… которое не имеет точки в середине его ». Так, например, ввод

Mr. Smith ate.5 pies in New York.

не должен выводить ничего, потому что нет слова с точкой в середине. Напротив,

Mr.Smith ate 1.5 pies in New York.

следует указать Mr.Smith и  1.5. Таким образом, команда должна быть

awk '{ for (i=1; i<=NF; i++) if ($i !~ /.\../) $i = ""; print; }'

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

1
27.01.2020, 23:15

Теги

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