Как я удаляю ненужную часть этого файла?

У меня есть это .scp файлы, который содержит полную команду, необходимую к для преобразования набора файлов.

Это регистрирует, был сгенерирован другим сценарием, для другой цели, но теперь мне нужен он, преобразовывают набор файлов.

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

Как я удаляю первый из файла, такого, что я могу преобразовать все файлы, столь же легкие как выполнение сценария?

Вот образец того, как текст в файле отформатирован.

fcaw-b-an406 /home/k/kaldi-trunk/egs/start/s5/data/../../../../tools/sph2pipe_v2.5/sph2pipe -f wav -p -c 1 /home/k/kaldi-trunk/egs/start/s5/data/train/fcaw/an406-fcaw-b.sph |
fcaw-b-an407 /home/k/kaldi-trunk/egs/start/s5/data/../../../../tools/sph2pipe_v2.5/sph2pipe -f wav -p -c 1 /home/k/kaldi-trunk/egs/start/s5/data/train/fcaw/an407-fcaw-b.sph |
fcaw-b-an408 /home/k/kaldi-trunk/egs/start/s5/data/../../../../tools/sph2pipe_v2.5/sph2pipe -f wav -p -c 1 /home/k/kaldi-trunk/egs/start/s5/data/train/fcaw/an408-fcaw-b.sph |
fcaw-b-an409 /home/k/kaldi-trunk/egs/start/s5/data/../../../../tools/sph2pipe_v2.5/sph2pipe -f wav -p -c 1 /home/k/kaldi-trunk/egs/start/s5/data/train/fcaw/an409-fcaw-b.sph |
fcaw-b-an410 /home/k/kaldi-trunk/egs/start/s5/data/../../../../tools/sph2pipe_v2.5/sph2pipe -f wav -p -c 1 /home/k/kaldi-trunk/egs/start/s5/data/train/fcaw/an410-fcaw-b.sph |
fcaw-b-cen1 /home/k/kaldi-trunk/egs/start/s5/data/../../../../tools/sph2pipe_v2.5/sph2pipe -f wav -p -c 1 /home/k/kaldi-trunk/egs/start/s5/data/train/fcaw/cen1-fcaw-b.sph |...

Желаемый вывод

/home/k/kaldi-trunk/egs/start/s5/data/../../../../tools/sph2pipe_v2.5/sph2pipe -f wav -p -c 1 /home/k/kaldi-trunk/egs/start/s5/data/train/fcaw/an406-fcaw-b.sph |
/home/k/kaldi-trunk/egs/start/s5/data/../../../../tools/sph2pipe_v2.5/sph2pipe -f wav -p -c 1 /home/k/kaldi-trunk/egs/start/s5/data/train/fcaw/an407-fcaw-b.sph |
/home/k/kaldi-trunk/egs/start/s5/data/../../../../tools/sph2pipe_v2.5/sph2pipe -f wav -p -c 1 /home/k/kaldi-trunk/egs/start/s5/data/train/fcaw/an408-fcaw-b.sph |
/home/k/kaldi-trunk/egs/start/s5/data/../../../../tools/sph2pipe_v2.5/sph2pipe -f wav -p -c 1 /home/k/kaldi-trunk/egs/start/s5/data/train/fcaw/an409-fcaw-b.sph |
/home/k/kaldi-trunk/egs/start/s5/data/../../../../tools/sph2pipe_v2.5/sph2pipe -f wav -p -c 1 /home/k/kaldi-trunk/egs/start/s5/data/train/fcaw/an410-fcaw-b.sph |
/home/k/kaldi-trunk/egs/start/s5/data/../../../../tools/sph2pipe_v2.5/sph2pipe -f wav -p -c 1 /home/k/kaldi-trunk/egs/start/s5/data/train/fcaw/cen1-fcaw-b.sph |...
3
задан 2 October 2016 в 00:04

1 ответ

Много путей:


  • grep с PCRE (-P):

    grep -Po '^[^\s]+\s+\K.*' file.txt
    
    • ^[^\s]+\s+ соответствует первому полю наряду с запаздывающим пробелом, \K отбрасывает соответствие, и затем .* остальная часть соответствий строки и печатается

  • sed:

    sed -E 's/^[^[:blank:]]+[[:blank:]]+//' file.txt
    
    • ^[^[:blank:]]+[[:blank:]]+ соответствует первому полю, снова с запаздывающим пробелом (пробелами) и заменяется пустой строкой

  • awk:

    awk -F "[[:blank:]]+" '{$1=""; print substr($0, 2)}' file.txt
    
    • -F "[[:blank:]]+" разделитель полей наборов как один или несколько пробелов, $1="" наборы первое поле как пустая строка, это представляет пробел впереди, таким образом, мы должны сделать строку, режущую с substr (0$, 2)' для получения символов, начинающих со второго

  • cut:

    cut -d" " -f2- file.txt
    
    • -d" " устанавливает разделитель как пространство, и -f2- печатает поля, начинающие со второго

  • bash:

    while read -r _ desired; do echo "$desired"; done <file.txt
    
    • Чтение каждой строки и наборов первое поле как бесплатная переменная _, desired содержит остающуюся часть и печатается echo "$desired"

  • perl:

    perl -pe 's/^[^\s]+\s+//' file.txt
    
    • Подобная логика к sed один

  • python:

    #!/usr/bin/env python
    with open('file.txt') as f:
        for line in f:
            print line.split(' ', 1)[1]
    
    • Чтение каждой строки, и line.split(' ', 1) будет split на пространстве с максимумом 1 разделение операции, таким образом, индекс 0 будет содержать первое слово и индекс 1, будет иметь желаемую часть (т.е. от второго слова до конца)
5
ответ дан 1 December 2019 в 15:35

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

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