Обратите внимание на «\ R» как ничего в «во время чтения -R»

Вы можете использовать эффект trim; например, trim 0 15 пропустит только первые 15 секунд аудио. Вы можете поставить его до или после silence:

  • Если до silence, этот эффект "услышит" только 15 секунд и, возможно, выведет меньше, если из этих 15 секунд нужно убрать тишину.
  • Если после silence, trim будет "слышать" звук с уже удаленной тишиной и остановится после 15 секунд отсутствия тишины.
1
20.07.2018, 04:19
3 ответа

Если у вас есть файлы, которые являются текстовыми файлами DOS, а некоторые являются текстовыми файлами Unix, ваш сценарий может передавать все данные черезdos2unix:

dos2unix <filename |
while IFS= read stuff; do
   # do things with "$stuff"
done 

Текстовые файлы Unix при этом не изменятся.

Чтобы дополнительно справляться с разрывами строк Mac, я считаю, что вы должны уметь

dos2unix <filename | mac2unix |
while IFS= read stuff; do
   # do things with "$stuff"
done 

Последняя строка не выводится вашим циклом read, так как он не завершается и, следовательно, вообще не является строкой.

Чтобы определить, нет ли в файле завершающей новой строки в последней строке, и добавить ее, если нет, вbash:

if [ "$( tail -c 1 filename )" != $'\n' ]; then
    printf '\n' >>filename
fi

Связанные:

0
27.01.2020, 23:43

Для этого существуют явные инструменты. более распространенный, который можно использовать для удаления \r\nиз файлов, называется dos2unix.

Если это недоступно в вашей системе, вы можете использовать одну из следующих команд, чтобы сделать что-то подобное с вашей textFileLinesпеременной:

авк
$ echo "$textFileLines" | awk 1 RS='\r\n' ORS=
Сед 1
$ echo "$textFileLines" | sed -e 's/\r//g'
Сед 2
$ echo $textFileLines | sed $'s/\r//'
тр
$ echo "$textFileLines" | tr -d '\r'

Конечно, есть много других способов сделать это, это лишь некоторые из наиболее распространенных.

Ссылки

0
27.01.2020, 23:43

Выполнить:

$ [ -n "$(tail -c1 infile)" ] && echo >> infile
$ sed 's/\r$\|^\r//g;s/\r/\n/g' infile | while IFS= read -r line
> do echo "$line" ; done
DOS       line
second     DOS
old  mac   line
new  mac   line
end\n\rreverse
linux      line
new linux  line

Все проблемы решены.


Описание:

Чтобы исправить отсутствие последней новой строки, используйте:

[ -n "$(tail -c1 infile)" ] && echo >> infile

Что добавит завершающую новую строку только в случае необходимости (не изменит правильный файл ).

Затем вы можете преобразовать

  • \r\n(Стиль DOS )-\n(просто удалите \r в конце строки)
  • \n\r(недопустимый стиль DOS? )на один\n(удалить \r в начале строки)
  • , а затем (с исправленными парами )преобразовать\r(старый MAC-адрес )в\n

всего за один вызов (GNU )sed с:

sed 's/\r$\|^\r//g;s/\r/\n/g' infile

Если текстовый файл похож на этот тестовый файл:

$ cat infile
DOS       line
second     DOS
new  mac   line
end\n\rreverse
linux      line
new linux  line
no  end   line

$ cat -A infile
DOS       line^M$
second     DOS^M$
old  mac   line^Mnew  mac   line$
end\n\rreverse$
^Mlinux      line$
new linux  line$
no  end   line

$  od -An -tc infile
   D   O   S                               l   i   n   e  \r  \n
   s   e   c   o   n   d                       D   O   S  \r  \n
   o   l   d           m   a   c               l   i   n   e  \r
   n   e   w           m   a   c               l   i   n   e  \n
   e   n   d   \   n   \   r   r   e   v   e   r   s   e  \n  \r
   l   i   n   u   x                           l   i   n   e  \n
   n   e   w       l   i   n   u   x           l   i   n   e  \n
   n   o           e   n   d               l   i   n   e
0
27.01.2020, 23:43

Теги

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