Изменение частей строки, содержащей строку, с помощью bash (macos)

За вероятным исключением 16.4.3528.331(, который является номером версии Microsoft MimeOLE ), и, возможно, 190822-4(, который, по-видимому, основан на дате ), ни один из этих номеров или строк не имеет общее -назначение значение.

Под «значением общего назначения» я подразумеваю любое значение вне контекста сообщения, которое обрабатывается в данный момент, или конкретных программ, которые его обрабатывают.

Они либо генерируются (часто полу-случайным образом )для создания уникальных (или почти уникальных )идентификаторов без фактического значения, или какого-либо идентификатора или отслеживания код со значением, имеющим отношение только к программе (s ), создавшей их. Эти строки обычно генерируются для целей ведения журнала, чтобы можно было отслеживать путь конкретного сообщения через различные процессы (идентификаторы очередей и идентификаторы процессов и т. д. )и/или системы (сообщение -идентификатор )..

Короче говоря, они не имеют смысла. За исключением номеров версий, они существуют в первую очередь для помощи в анализе и аудите файла журнала. Это произвольные идентификаторы.

0
03.10.2021, 07:15
2 ответа
sed '/ \[LD\]/ { s///; s,/,/_lossless/,2; }' file

Чтобы найти строки в файле, содержащие подстроку  [LD], вы можете использовать регулярное выражение / \[LD\]/в sed. [необходимо экранировать, чтобы потерять особое значение, которое оно в противном случае имело бы в регулярном выражении. Нам не нужно избегать ], но мы будем избегать его ради симметрии.

Как только мы нашли строку с подстрокой  [LD], мы можем заменить эту строку ничем, т. е. удалить ее с помощью замены s///. При использовании пустого регулярного выражения -будет использовано самое последнее выражение, а самое последнее выражение соответствовало  [LD].

Следующая подстановка заменяет второй /строкой /_lossless/. Мы выбираем второе совпадение регулярного выражения /в строке, используя 2в конце, и используем запятые в качестве разделителей для команды, а не косую черту для удобства.

В цикле создаются файлы с суффиксом имени файла .new:

for name in *.m3u; do
    sed '/ \[LD\]/ { s///; s,/,/_lossless/,2; }' -- "$name" >"$name".new
done

Чтобы заменить файлы в -на macOS, используйте sed -i ''....

for name in *.m3u; do
    sed -i '' '/ \[LD\]/ { s///; s,/,/_lossless/,2; }' -- "$name"
done

Не забудьте -создать резервную копию данных перед тестированием деструктивных команд.

0
03.10.2021, 07:41

Вы можете попробовать этоsed

for f in *.mp3; do
    var1=$(sed -E 's|(.[^/]*)(.[^[]*).*](.*)|\1/_lossless\2\3|' "$f")
    mv "$f" "var1"
done

Выход

/music/_lossless/Miles Davis/1959 - Kind of Blue /Miles Davis - So What.mp3
0
03.10.2021, 10:48

Теги

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