Как удалить строки из файла, которые не содержат точку?

У меня есть файл, который содержит данные включая URL. Но существуют различные строки, которые не являются URL. Как я могу удалить их использующий команды терминала Ubuntu?

Вот Файл примера для ссылки: Демонстрационные Данные

com.blendtuts/S
°=
com.blengineering.www/:http
±=

Я хочу иметь вывод:

com.blendtuts/S
com.blengineering.www/:http

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

10
задан 8 November 2016 в 10:29

6 ответов

Один путь с sed

sed '/\./!d' file
  • /\./ точка литерала соответствия (вышел с \, потому что иначе . соответствия любой символ)
  • !d удаляют все кроме подобранного шаблона

, Если Вы хотите отредактировать файл на месте, добавьте -i к команде после тестирования. (Можно также добавить .bak к -i флаг sed -i.bak ... для создания локального резервного копирования файла.)

sed -i '/\./!d' file
30
ответ дан 23 November 2019 в 04:15

Вы могли grep все с точкой в новый файл:

grep "\."  file > newfile

Тот путь можно сохранить старый файл.

26
ответ дан 23 November 2019 в 04:15

Или сохраните строки, которые содержат точка ,

sed -ni.bak '/\./p' infile
10
ответ дан 23 November 2019 в 04:15

Я думаю awk, то, которые длятся тот, отсутствующий стороне:

$ awk -F\. 'NF>1' file
com.blendtuts/S
com.blengineering.www/:http

Это устанавливает разделителя полей на точку. Затем это - вопрос печати тех строк, которые имеют по крайней мере два поля: это будет означать, что по крайней мере одна точка происходит.

8
ответ дан 23 November 2019 в 04:15

Используя жемчуг:

perl -i -ne 'print if /\./' /path/to/file
6
ответ дан 23 November 2019 в 04:15

Можно сделать это довольно легко с энергией. Если Вы - удобная энергия использования как текстовый редактор (открытие, редактирование и запись файлов), то сделайте это:

:g!/\./d

, Если Вы не удобная энергия использования, или Вы использовали бы ее в качестве инструмента командной строки, можно просто сделать от терминала:

vim file -c "g!/\./d" -c "wq"

Вы могли немного изменить это для сохранения в новый файл:

vim file -c "g!/\./d" -c "w newfile" -c "q!"

Это использует "глобальную" команду энергии, которая применяется исключая командой к каждой строке, соответствующей (или не соответствующей) regex. В этом случае команда является" (d) элитой", и она будет применена к каждой команде, не соответствующей regex \.

6
ответ дан 23 November 2019 в 04:15

Другие вопросы по тегам:

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