#linux
Вопрос:
Это проблема Linux, поэтому мне нужно создать папку под названием «Заметки», и в этой папке мне нужно создать 6 файлов. Файлы именуются с помощью идентификационного номера следующим образом:
- a00144998.txt
- a00154667.txt
- a00130933.txt
- a00143561.txt
- a00157888.txt
Первые 3 буквы всегда «a00″, а 4-я и 5-я буквы-это год. Поэтому теперь мне нужно скопировать идентификационный номер/название файла без расширения». txt» и вставить его в новый файл за пределами папки «Примечания» Пример файла a00144998, в нем указан 14-й год(из 4-й и 5-й буквы), поэтому я скопирую a00144998 в новый файл с именем «year14.txt» и разберись с этим. Так же, как и a00154667, он показывает 15-й год, поэтому я скопирую a00154667 в новый файл с именем «year15.txt». Итак, в конце, файл «year14.txt» придется :
a00143561
a00144998
Я нашел код, и он работает, если файлов нет в папке. Но как только я создаю файлы внутри папки, этот код не работает, он продолжает копировать расширение txt. Есть идеи? Спасибо!
ls ~/Notes/???14????.txt|sed 's/.[4]$//'|sort>year14.txt
Ответ №1:
В этом нет необходимости , вы можете сделать все это за один раз. sed
:
for f in a0014*.txt; do echo ${f:5:4}; done | sort > year14.txt
Это будет перебирать a0014*.txt
каждый файл, соответствующий глобусу, и помещать каждую строку в f
переменную, повторяя 4
символы, начинающиеся после символа 5
th.
В TLDP есть отличное руководство по манипулированию строками в bash.
Вам также следует избегать синтаксического ls
анализа . Он должен быть человеческим, а не машиночитаемым.