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


10

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

Вот пример файла для справки: Пример данных

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

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

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

У лишних нежелательных линий нет точек. Следовательно, я хочу удалить линии без точек

Ответы:


30

В одну сторону с sed

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

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

sed -i '/\./!d' file

26

Вы можете записать все с точкой в ​​новый файл:

grep "\."  file > newfile

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


10

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

sed -ni.bak '/\./p' infile

8

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

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

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


3
Более простым решением awk было бы сделать это в том же ключе, что и grep: awk '/\./' file- то есть вывести только строки, содержащие символ «.».
Крис Мидгли

@ChrisMidgley хороший! Так как это то, что ответ с grepуже предложенным, я предпочел пойти с некоторыми awkспецифическими вещами :)
fedorqui


6

Вы можете сделать это довольно легко с 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", и она будет применяться к каждой команде, не соответствующей регулярному выражению\.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.