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

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

Вот пример файла для справки: Sample Data

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

Я хочу получить вывод:

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

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

1
задан 8 November 2016 в 21:29

5 ответов

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

grep "\."  file > newfile

Таким образом вы можете сохранить старый файл.

26
ответ дан 23 May 2018 в 04:24

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

sed -ni.bak '/\./p' infile
10
ответ дан 23 May 2018 в 04:24

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

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

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

8
ответ дан 23 May 2018 в 04:24
  • 1
    Более простым решением awk было бы сделать это в том же духе, что и grep: awk '/\./' file, т. Е. Печатать только строки, содержащие символ «.». – Chris Midgley 8 November 2016 в 17:05
  • 2
    @ChrisMidgley хороший! Так как это уже сказал ответ с grep, я предпочел пойти с некоторыми awk -специфическими вещами :) – fedorqui 8 November 2016 в 17:43

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

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

Вы можете сделать это довольно легко с помощью vim. Если вам удобно использовать vim в качестве текстового редактора (открытие, редактирование и запись файлов), сделайте следующее:

:g!/\./d

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

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

Вы можете немного изменить это, чтобы сохранить его в новый файл:

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

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

6
ответ дан 23 May 2018 в 04:24

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

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