Как удалить определенные символы в текстовом файле

У меня есть следующие строки в текстовом файле:

1 Q0 /home/nikol123/Downloads/Ergasia_1/Ergasia_1/metadata/13/120411.xml 1 1 Q0 /home/nikol123/Downloads/Ergasia_1/Ergasia_1/metadata/11/105016.xml 2 1 Q0 /home/nikol123/Downloads/Ergasia_1/Ergasia_1/metadata/15/149972.xml 3 1 Q0 /home/nikol123/Downloads/Ergasia_1/Ergasia_1/metadata/12/110688.xml 4 

и я хочу сохранить только эти данные:

 1 Q0 120411 1 1 Q0 105016 2 1 Q0 149972 3 1 Q0 110688 4 

а именно сохранить от каждой строки путь /home/nikol123/Downloads/Ergasia_1/Ergasia_1/metadata/13/120411.xml например, только номер 120411 и т. д. …

  • Повторное назначение (в частности, увеличение) переменной в сценарии bash
  • Разработка сценария bash с использованием переменных
  • Как получить дополнительную информацию о происхождении кода выхода?
  • данные о трубах в процесс, который уже запущен
  • zsh: команда map для массива
  • Лучший способ запуска одиночного цикла вместо двух для циклов
  • Обмен переменными в нескольких сценариях оболочки
  • находить измененные файлы рекурсивно и копировать с каталогом, сохраняющей структуру каталогов
  • 3 Solutions collect form web for “Как удалить определенные символы в текстовом файле”

    Попробуйте awk с / awk , а также (пробел) в качестве разделителей полей:

     awk -F'[/. ]' '{print $1 " " $2 " " $11 " " $13}' file 

    Вывод:

     1 Q0 120411 1 1 Q0 105016 2 1 Q0 149972 3 1 Q0 110688 4 

    Попробуйте sed:

     sed 's/\(1 Q0\).*\/\(.*\)\.xml\( .*\)/\1 \2\3/' file 

    ИЛИ

     sed 's/\(.*\)\/home.*\/\(.*\)\.xml\( .*\)/\1\2\3/' file 

    Вывод:

     1 Q0 120411 1 1 Q0 105016 2 1 Q0 149972 3 1 Q0 110688 4 

    Мое решение с sed (OSX & BSD):

     sed -E 's!([0-9]*) (Q0) [a-zA-Z0-9_/]*/([0-9]*).xml ([0-9])!\1 \2 \3 \4!g' file.txt 

    Если вам нужен другой шаблон (например, Q0 не постоянный …), вы должны его адаптировать.

    Linux и Unix - лучшая ОС в мире.