У меня есть файл, содержащий данные, включая URL-адреса. Но есть разные строки, которые не являются адресами. Как я могу удалить их с помощью команд терминала Ubuntu?
Вот пример файла для справки: Sample Data
com.blendtuts/S
°=
com.blengineering.www/:http
±=
Я хочу получить вывод:
com.blendtuts/S
com.blengineering.www/:http
На дополнительных нежелательных линиях нет точки. Следовательно, я хочу удалить строки без точек
Вы можете grep все с точкой в новый файл:
grep "\." file > newfile
Таким образом вы можете сохранить старый файл.
Или сохраните строки, содержащие точку,
sed -ni.bak '/\./p' infile
Я думаю, awk в том, что последний отсутствует для партии:
$ awk -F\. 'NF>1' file
com.blendtuts/S
com.blengineering.www/:http
Это устанавливает разделитель полей в точку. Затем нужно напечатать те строки, у которых есть по крайней мере два поля: это будет означать, что происходит хотя бы одна точка.
Использование perl:
perl -i -ne 'print if /\./' /path/to/file
Вы можете сделать это довольно легко с помощью 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», и она будет применяться к каждой команде, не соответствующей регулярному выражению \.