Вы можете кошка три md5 суммы в файл и после этого делать другой md5 на том файле, любых изменениях в одном из тех результатов хешей в несоответствии в хеше файла окончательного текста.
свяжите md5 (1) И md5 (2) И md5 (3) в заключительный файл-> md5 (final_file)
Вы можете использовать sed
, чтобы убрать все остальное - все, начиная с последней косой черты :
mpc -f %file% | head -1 | sed 's:/[^/]*$::'
Шаблон /[^/]*$
совпадает с косой чертой, за которой следуют любые символы, кроме косой черты, вплоть до конца строки. Он заменяется на пустую строку.
Голова -1
игнорирует некоторый вывод состояния, следующий за нужной нам строкой - но смотрите ниже, как их вообще не печатать.
В случае, если вы не привыкли к sed, команда может выглядеть необычно из-за использования :
. Вы могли видеть команды sed
с /
в качестве разделителя раньше, как 's/foo/bar/'
- я предпочитаю использовать разделитель :
для удобочитаемости, так как выражение содержит /
само по себе. В качестве альтернативы в выражении можно обойтись без /
: 's/\/[^\/]*$//'
- это не делает его более читабельным.
То, как вы используете его с mpc
, дает вам две дополнительные статусные строки. Опция -q
для бесшумной работы отключает все выходы. Для получения нужной строки необходимо объединить -q
с явным выводом текущего воспроизводимого файла, и ничего больше:
mpc -q -f %file% current | sed 's:/[^/]*$:: '
Вместо удаления всего, начиная с последней косой черты, можно было явно распечатать все до последней косой черты:
mpc -q -f %file% current | sed 's:^\(. *\)/.*$:\1:'
Это соответствует любым символам, за которыми следует /
и любые другие символы; это соответствует настолько, насколько это возможно, так что /
, который соответствует, будет последним.
Grep не является последним инструментом для задания. grep -m 1 .
печатает первую непустую строку, что не полезно. Можно построить сложные решения с использованием grep и других инструментов, но простой путь - с помощью sed. Один из способов - заменить конечный цикл не косая черта, плюс предыдущий косая черта, на пустую строку:
mpc -f %file% | sed 's:/[^/]*$::'
В качестве альтернативы, держите все до последней косынки и отбрасывайте то, что следует:
mpc -f %file% | sed 's:^\(.*\)\(/.*\)$:\1:'
Остерегайтесь, что оба метода оставляют ввод без изменений, если он не содержит /
, т.е., если вы передаете имя файла без указания каталога. Хотя вы можете решить эту проблему в sed, если это проблема, проще вызвать команду dirname
:
dirname -- "$(mpc -f %file%)"
В скрипте оболочки также можно использовать конструкции расширения параметров , но это сложнее, если вы просто хотите распечатать результат:
full_path="$(mpc -f %file%)"
case "$full_path" in
*/*) directory_part="${full_path%/*}"
*) directory_part="."
printf '%s\n' "$directory_part"
Если вы хотите применить это правило к одной строке, то вместо sed
(см. другой ответ) можно использовать команду dirname
:
$ dirname "1 2/3 4/5 6/file"
1 2/3 4/5 6