{"id":3831,"date":"2016-08-06T17:50:12","date_gmt":"2016-08-06T16:50:12","guid":{"rendered":"https:\/\/stevepedwards.today\/DebianAdmin\/?p=3831"},"modified":"2025-07-03T17:32:11","modified_gmt":"2025-07-03T16:32:11","slug":"an-intro-to-metachar-search-methods-wreck-the-mp3s","status":"publish","type":"post","link":"https:\/\/stevepedwards.today\/DebianAdmin\/an-intro-to-metachar-search-methods-wreck-the-mp3s\/","title":{"rendered":"An Intro to Metachar Search Methods, Wreck the MP3s"},"content":{"rendered":"<div class=\"pvc_clear\"><\/div>\n<p id=\"pvc_stats_3831\" class=\"pvc_stats all  \" data-element-id=\"3831\" style=\"\"><i class=\"pvc-stats-icon medium\" aria-hidden=\"true\"><svg aria-hidden=\"true\" focusable=\"false\" data-prefix=\"far\" data-icon=\"chart-bar\" role=\"img\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"svg-inline--fa fa-chart-bar fa-w-16 fa-2x\"><path fill=\"currentColor\" d=\"M396.8 352h22.4c6.4 0 12.8-6.4 12.8-12.8V108.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v230.4c0 6.4 6.4 12.8 12.8 12.8zm-192 0h22.4c6.4 0 12.8-6.4 12.8-12.8V140.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v198.4c0 6.4 6.4 12.8 12.8 12.8zm96 0h22.4c6.4 0 12.8-6.4 12.8-12.8V204.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v134.4c0 6.4 6.4 12.8 12.8 12.8zM496 400H48V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v336c0 17.67 14.33 32 32 32h464c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16zm-387.2-48h22.4c6.4 0 12.8-6.4 12.8-12.8v-70.4c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v70.4c0 6.4 6.4 12.8 12.8 12.8z\" class=\"\"><\/path><\/svg><\/i> <img loading=\"lazy\" decoding=\"async\" width=\"16\" height=\"16\" alt=\"Loading\" src=\"https:\/\/stevepedwards.today\/DebianAdmin\/wp-content\/plugins\/page-views-count\/ajax-loader-2x.gif\" border=0 \/><\/p>\n<div class=\"pvc_clear\"><\/div>\n<h3 id=\"title_5_169\" class=\"cheat_sheet_output_title\">Common Metach\u00adara\u00adcters<\/h3>\n<div id=\"block_5_169\" class=\"cheat_sheet_output_block\">\n<table id=\"cheat_sheet_output_table\" class=\"cheat_sheet_output_fourcol\" style=\"height: 88px;\" border=\"0\" width=\"826\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr class=\"altrow countrow\">\n<td class=\"cheat_sheet_output_cell_1\" valign=\"top\">\n<div><span style=\"color: #0000ff;\"><strong>^<\/strong><\/span><\/div>\n<\/td>\n<td class=\"cheat_sheet_output_cell_2\" valign=\"top\">\n<div><span style=\"color: #0000ff;\"><strong>[<\/strong><\/span><\/div>\n<\/td>\n<td class=\"cheat_sheet_output_cell_3\" valign=\"top\">\n<div><span style=\"color: #0000ff;\"><strong>.<\/strong><\/span><\/div>\n<\/td>\n<td class=\"cheat_sheet_output_cell_4\" valign=\"top\">\n<div><span style=\"color: #0000ff;\"><strong>$<\/strong><\/span><\/div>\n<\/td>\n<\/tr>\n<tr class=\"countrow\">\n<td class=\"cheat_sheet_output_cell_1\" valign=\"top\">\n<div><span style=\"color: #0000ff;\"><strong>{<\/strong><\/span><\/div>\n<\/td>\n<td class=\"cheat_sheet_output_cell_2\" valign=\"top\">\n<div><span style=\"color: #0000ff;\"><strong>*<\/strong><\/span><\/div>\n<\/td>\n<td class=\"cheat_sheet_output_cell_3\" valign=\"top\">\n<div><span style=\"color: #0000ff;\"><strong>(<\/strong><\/span><\/div>\n<\/td>\n<td class=\"cheat_sheet_output_cell_4\" valign=\"top\">\n<div><span style=\"color: #0000ff;\"><strong>\\<\/strong><\/span><\/div>\n<\/td>\n<\/tr>\n<tr class=\"altrow countrow\">\n<td class=\"cheat_sheet_output_cell_1\" valign=\"top\">\n<div><span style=\"color: #0000ff;\"><strong>+<\/strong><\/span><\/div>\n<\/td>\n<td class=\"cheat_sheet_output_cell_2\" valign=\"top\">\n<div><span style=\"color: #0000ff;\"><strong>)<\/strong><\/span><\/div>\n<\/td>\n<td class=\"cheat_sheet_output_cell_3\" valign=\"top\">\n<div><span style=\"color: #0000ff;\"><strong>|<\/strong><\/span><\/div>\n<\/td>\n<td class=\"cheat_sheet_output_cell_4\" valign=\"top\">\n<div><span style=\"color: #0000ff;\"><strong>?<\/strong><\/span><\/div>\n<\/td>\n<\/tr>\n<tr class=\"countrow\">\n<td class=\"cheat_sheet_output_cell_1\" valign=\"top\">\n<div><span style=\"color: #0000ff;\"><strong>&lt;<\/strong><\/span><\/div>\n<\/td>\n<td class=\"cheat_sheet_output_cell_2\" colspan=\"3\" valign=\"top\">\n<div><span style=\"color: #0000ff;\"><strong>&gt;<\/strong><\/span><\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div class=\"cheat_sheet_note\">\n<div><span style=\"color: #0000ff;\"><strong>The escape character is usually \\<\/strong><\/span><\/div>\n<div><\/div>\n<\/div>\n<\/div>\n<p>This Post evolved due to the masochistic desire improve my knowledge of regexs and metachars, possibly using them to tidy up MP3 album\/song titles that can be horrendous looking on the command line, so a good place to practise regex ops.<\/p>\n<p><span style=\"color: #0000ff;\">ls PorcupineTree\\ -\\ Up\\ the\\ Downstair\/Unknown\\ Album\\ \\(e2118a0e\\)\\ -\\ Track\\<\/span><\/p>\n<p>Space removal in file names is the first step, started and covered in the Find with -Exec Post, as there are different ways to do this; sed, tr, awk and rename for a start, examples of which have been covered in that Post, plus the PDF eBook Creation Post where it was necessary for the task to work.<\/p>\n<p><span style=\"color: #0000ff;\">cat file.txt <\/span><\/p>\n<p><span style=\"color: #ff0000;\"> this has one or more spaces in it<\/span><\/p>\n<p><span style=\"color: #0000ff;\">sed 's\/ \/\/g' &lt; file.txt<\/span><\/p>\n<p><span style=\"color: #ff0000;\">thishasoneormorespacesinit<\/span><\/p>\n<p><span style=\"color: #0000ff;\">cat file.txt | tr -d \" \"<\/span><\/p>\n<p><span style=\"color: #ff0000;\">thishasoneormorespacesinit<\/span><\/p>\n<p><span style=\"color: #0000ff;\">awk 'gsub(\" \",\"\")' &lt; file.txt <\/span><\/p>\n<p><span style=\"color: #ff0000;\">thishasoneormorespacesinit<\/span><\/p>\n<p><span style=\"color: #0000ff;\">touch file\\ name\\ with\\ spaces.txt<\/span><\/p>\n<p><span style=\"color: #0000ff;\">rename 's\/ \/\/g' file\\ name\\ with\\ spaces.txt<\/span><\/p>\n<p><span style=\"color: #ff0000;\">filenamewithspaces.txt<\/span><\/p>\n<p>Note the original file content is not altered by any of them but rename DOES rename the file unless it already exists - that's it's job!<\/p>\n<p>Important to understand for the addition of -exec rename \u00a6 to the find command later.<\/p>\n<p>I'm fascinated by the ability of linux to manipulate text the way it does, but filters\/metachars are a massive and complex subject that needs to be studied and practised - on replaceable\/unimportant files ideally - to get experience and an idea of the weirdness of it; my large MP3 collection being ideal for this due to the complex names, and as I have backups for the inevitable deletions that can occur when you just wanted a name change!<\/p>\n<p>What follows are some ideas on ways to approach the topic.<\/p>\n<p>First, set yourself a problem to solve that has probable future re-use benefits - start with the whitespace removal examples I have covered below.<\/p>\n<p>This will always be useful to know on a Linux system, and gives a good starting position to alter commands from so build complexity, so understanding.<\/p>\n<p>It's a good idea to know how many files and directories your user owns compared to those found (so you know you can change them) to start, so for my MP3 directory:<\/p>\n<p><span style=\"color: #0000ff;\">sudo find -type d | wc -l<\/span><\/p>\n<p><span style=\"color: #ff0000;\">559<\/span><\/p>\n<p><span style=\"color: #0000ff;\">find -type d -user stevee | wc -l<\/span><\/p>\n<p><span style=\"color: #ff0000;\">559<\/span><\/p>\n<p><span style=\"color: #0000ff;\">sudo find -type f | wc -l<\/span><\/p>\n<p><span style=\"color: #ff0000;\">7248<\/span><\/p>\n<p><span style=\"color: #0000ff;\">find -type f -user stevee | wc -l<\/span><\/p>\n<p><span style=\"color: #ff0000;\">7248<\/span><\/p>\n<p>That is fine. But you need to work on a small sample first this is far too many to keep track of. Also get rid on any none mp3 files like art if not necessary. This gets your brain in find command mode also.<\/p>\n<p><span style=\"color: #ffffff;\">There are many .jpg in here so they can just go:<\/span><\/p>\n<p><span style=\"color: #0000ff;\">find -name '*jpg' | wc -l<\/span><\/p>\n<p><span style=\"color: #ff0000;\">422<\/span><\/p>\n<p><span style=\"color: #0000ff;\">find -name '*jpg' -exec rm -v {} +;<\/span><\/p>\n<p>Some Thumbs.db and desktop.ini files can go too\u00a6<\/p>\n<p>Now there is<\/p>\n<p><span style=\"color: #0000ff;\">find -name '*' | wc -l<\/span><\/p>\n<p><span style=\"color: #ff0000;\">6992<\/span><\/p>\n<p>Cd into one directory and work out as many generic regexs as you can in each for various file name types before applying them globally if you value your data make SURE you have backups of it all!<\/p>\n<p>The white space find and removal started with just the find part for either directories or files, but these have mostly already had white space removed by me before:<\/p>\n<p>stevee@dellmint \/Quadra\/MP3 $ <span style=\"color: #0000ff;\">find -type d -name \"*[[:blank:]]*\"<\/span><\/p>\n<p><span style=\"color: #ff0000;\">.\/Steves Greatest Misses<\/span><\/p>\n<p>stevee@dellmint \/Quadra\/MP3 $<span style=\"color: #0000ff;\"> find -type f -name \"*[[:blank:]]*\"<\/span><\/p>\n<p><span style=\"color: #ff0000;\">.\/All_Found_MP3s\/Love Philter.mp3<\/span><\/p>\n<p><span style=\"color: #ff0000;\">.\/All_Found_MP3s\/Lovely Brasilia.mp3<\/span><\/p>\n<p><span style=\"color: #ff0000;\">.\/All_Found_MP3s\/Boo Bass Riff.mp3<\/span><\/p>\n<p><span style=\"color: #ff0000;\">.\/All_Found_MP3s\/IVETE SANGALO &amp; BABADO NOVO. Amor Perfeito (Ax\u00c3\u00a9) (Ao Vivo) \u00a9GaliaBsAs.mp3\u00a6.<\/span><\/p>\n<p>Run the first command for directories only from above you know what happens with rename if a non-white space file of the same name already exists:<\/p>\n<p><span style=\"color: #0000ff;\">find -type d -name \"*[[:blank:]]*\" -exec rename \"s\/ \/\/g\" {} +;<\/span><\/p>\n<p><span style=\"color: #ff0000;\">.\/Steves Greatest Misses not renamed: .\/StevesGreatestMisses already exists<\/span><\/p>\n<p><span style=\"color: #ffffff;\">Now amend it for files:<\/span><\/p>\n<p><span style=\"color: #0000ff;\">find -type f -name \"*[[:blank:]]*\" -exec rename \"s\/ \/\/g\" {} +;<\/span><\/p>\n<p><span style=\"color: #ff0000;\">.\/All_Found_MP3s\/Love Philter.mp3 not renamed: .\/All_Found_MP3s\/LovePhilter.mp3 already exists<\/span><\/p>\n<p><span style=\"color: #ff0000;\">.\/All_Found_MP3s\/IVETE SANGALO &amp; BABADO NOVO. Amor Perfeito (Ax\u00c3\u00a9) (Ao Vivo) \u00a9GaliaBsAs.mp3 not renamed:\u00a6. <\/span><\/p>\n<p><span style=\"color: #ffffff;\">As these already exist, they can be removed by changing the -exec rename for remove note that rm -vr will recurse into that directory so remove any files also that DO NOT have white space be careful! Use rm -v for directories ONLY unless sure you want that!<\/span><\/p>\n<p><span style=\"color: #0000ff;\">find -type d -name \"*[[:blank:]]*\" -exec rm -vr {} +;<\/span><\/p>\n<p><span style=\"color: #ff0000;\"><strong>removed<\/strong> \u02dc.\/Steves Greatest Misses\/LovePhilterDance.mp3,<\/span><\/p>\n<p><span style=\"color: #ff0000;\"><strong>removed<\/strong> \u02dc.\/Steves Greatest Misses\/Driving In Rain.mp3,<\/span><\/p>\n<p><span style=\"color: #ff0000;\">\u00a6.<\/span><\/p>\n<p><span style=\"color: #0000ff;\">find -type f -name \"*[[:blank:]]*\" -exec rm -v {} +;<\/span><\/p>\n<p><span style=\"color: #ff0000;\">removed \u02dc.\/All_Found_MP3s\/Love Philter.mp3,<\/span><\/p>\n<p><span style=\"color: #ff0000;\">removed \u02dc.\/IveteSangaloSonia\/IVETE SANGALO &amp; BABADO NOVO. Amor Perfeito (Ax\u00c3\u00a9) (Ao Vivo) \u00a9GaliaBsAs.mp3,\u00a6..<\/span><\/p>\n<p><span style=\"color: #ffffff;\">Now on to the next step say, tidying the files that contain chars in () brackets first e.g:<\/span><\/p>\n<p><span style=\"color: #0000ff;\">find -regex '.*[^-_.\/0-9a-zA-Z].*'<\/span><\/p>\n<p><span style=\"color: #ff0000;\">.\/MarinaElali\/AlbumArt_{560D258D-8C82-455E-9968-4B33457C283A}_Large.jpg<\/span><\/p>\n<p><span style=\"color: #ff0000;\">.\/MarinaElali\/04-MarinaElali-OneLastCry(Paginasdavidainternacional).mp3<\/span><\/p>\n<p><span style=\"color: #ff0000;\">.\/SugababesBest\/UnknownAlbum(db0da20f)-Track08.mp3\u00a6.<\/span><\/p>\n<p><span style=\"color: #0000ff;\">find -regex '.*[^-_.\/0-9a-zA-Z].*' | wc -l<\/span><\/p>\n<p><span style=\"color: #ff0000;\">2854<\/span><\/p>\n<p><span style=\"color: #ffffff;\">Alphanums inside () brackets is a bit too ambitious at first try numbers inside brackets first. How?<\/span><\/p>\n<p><span style=\"color: #ffffff;\">What do I already know? From Shott's PDF, the metachars are: <\/span><\/p>\n<p><span style=\"color: #ffffff;\"><span style=\"font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\"><span style=\"font-size: small;\">Regular expression metacharacters usage consist of the following:<\/span><\/span><\/span><\/p>\n<p><span style=\"color: #ffffff;\"><span style=\"font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\"><span style=\"font-size: small;\">^ $ . [ ] { } - ? * + ( ) | \\<\/span><\/span><\/span><\/p>\n<p><span style=\"color: #ffffff;\">How do you isolate them? The () don't appear explicitly in that regex as they are special shell recognised chars in themselves, so have appeared in file names as a by product of the surrounding catchall asterisk * expansion.<\/span><\/p>\n<p><span style=\"color: #ffffff;\">Experiment by simplifying that regex to just a numbers contained in () maybe?<\/span><\/p>\n<p><span style=\"color: #0000ff;\">find -regex '.*([0-9]).*' | wc -l<\/span><\/p>\n<p><span style=\"color: #ff0000;\">79<\/span><\/p>\n<p><span style=\"color: #ffffff;\">Analyse them by directing the list into a home dir file and read it with less to check if each entry has numbers within () and chars either side, but nothing else inside the () it seems so:<\/span><\/p>\n<p><span style=\"color: #0000ff;\">find -regex '.*([0-9]).*' &gt; ~\/numberbrackets.txt<\/span><\/p>\n<p><span style=\"color: #ff0000;\">.\/All_Found_MP3s\/11Track11(2).mp3<\/span><\/p>\n<p><span style=\"color: #ff0000;\">.\/All_Found_MP3s\/36Track36(2).mp3<\/span><\/p>\n<p><span style=\"color: #ff0000;\">\u00a6.<\/span><\/p>\n<p><span style=\"color: #ffffff;\">Can just these parts of the titles be removed? <\/span><\/p>\n<p><span style=\"color: #ffffff;\">From above, the SED global search and replace methods use a forward slash to delimit chars, as does the format for the rename cmd; white space removal was achieved by searching the found file name for ONE white space after the s\/, then replacing it with NO char between the next two \/ delimiters, and to do this globally (g) for EVERY file found by find.<\/span><\/p>\n<p><span style=\"color: #0000ff;\">rename \"s\/ \/\/g\"<\/span><\/p>\n<p><span style=\"color: #ffffff;\">If the same logic is used to replace the numbers using a range [0-9] it may leave the actual () behind with nothing inside or not eh? Let's check on one file only first. Note the testing problem here no DRY-RUN option that I know of or have researched for either find or exec..?<\/span><\/p>\n<p><span style=\"color: #ffffff;\">Let's try it on the last file in the list and gain insight using ls. This shows that using TAB completion does not expand the first ( after Track43, so needs to be escaped before it will TAB complete:<\/span><\/p>\n<p><span style=\"color: #0000ff;\">ls All_Found_MP3s\/43Track43\\(<\/span><\/p>\n<p><span style=\"color: #ff0000;\">43Track43(2).mp3 43Track43.mp3<\/span><\/p>\n<p><span style=\"color: #ffffff;\">This is a clue to removal for the rename string e.g. <span style=\"color: #0000ff;\">rename \"s\/<\/span><span style=\"color: #0000ff;\">\\([0-9]\\)<\/span><span style=\"color: #0000ff;\">\/\/g\"<\/span><\/span><\/p>\n<p><span style=\"color: #ffffff;\">As the ( is a metachar, it needs to be escaped with a \\ to be read literally.<\/span><\/p>\n<p><span style=\"color: #ffffff;\">What this also highlights is that in prior copy operations (e.g. Windows merge), a file with the same name existed, so that is one reason for the current (2) version. <\/span><\/p>\n<p><span style=\"color: #ffffff;\">If so, I can't rename the file with the test, as it exists already. <\/span><\/p>\n<p><span style=\"color: #0000ff;\">find -name '*43Track43*'<\/span><\/p>\n<p><span style=\"color: #ff0000;\">.\/All_Found_MP3s\/43Track43.mp3<\/span><\/p>\n<p><span style=\"color: #ff0000;\">.\/All_Found_MP3s\/43Track43(2).mp3<\/span><\/p>\n<p><span style=\"color: #ffffff;\">It discerns both tracks with and without (), so now to add the rename regex part to show it works as required, but rename can't overwrite the existing file:<\/span><\/p>\n<p><span style=\"color: #0000ff;\">find -name '*43Track43*' -exec rename \"s\/\\([0-9]\\)\/\/g\" {} +;<\/span><\/p>\n<p><span style=\"color: #ff0000;\">.\/All_Found_MP3s\/43Track43(2).mp3 not renamed: .\/All_Found_MP3s\/43Track43.mp3 already exists<\/span><\/p>\n<p><span style=\"color: #ffffff;\">Wow! It seems it would have worked exactly as required by removing the () also, but for the already existing file! Progress! All I can do here is substitute (2) for something nicer that tells me I did the change, such as an \u00a3 for clarity. First be sure there are no files already with a \u00a3 present:<\/span><\/p>\n<p><span style=\"color: #0000ff;\">find -name '*\u00a3*' | wc -l<\/span><\/p>\n<p><span style=\"color: #ff0000;\">0<\/span><\/p>\n<p><span style=\"color: #0000ff;\">find -name '*43Track43*' -exec rename \"s\/\\([0-9]\\)\/\u00a3\/g\" {} +;<\/span><\/p>\n<p><span style=\"color: #ffffff;\">Great! Now I get a renamed track with the original unchanged:<\/span><\/p>\n<p><span style=\"color: #0000ff;\">find -name '*43Track43*'<\/span><\/p>\n<p><span style=\"color: #ff0000;\">.\/All_Found_MP3s\/43Track43.mp3<\/span><\/p>\n<p><span style=\"color: #ff0000;\">.\/All_Found_MP3s\/43Track43\u00a3.mp3<\/span><\/p>\n<p><span style=\"color: #ff0000;\">.\/All_Found_MP3s\/43Track43(2).mp3<\/span><\/p>\n<p><span style=\"color: #ffffff;\">As above for the white space files, once renamed the original can be deleted now or later using this same regex now I know it works. Depends if you want to prove this example works en-masse or not later. If not, remove it now.<\/span><\/p>\n<p><span style=\"color: #0000ff;\">rm -v All_Found_MP3s\/43Track43\\(2\\).mp3<\/span><\/p>\n<p><span style=\"color: #ffffff;\">The output can consist of much StdError, so it's difficult to see what's changed or not, which can be shown because wc -l shows no files output if no file changes occur:<\/span><\/p>\n<p><span style=\"color: #0000ff;\">find -regex '.*([0-9]).*' -exec rename \"s\/\\([0-9]\\)\/\/g\" {} +; | wc -l<\/span><\/p>\n<p><span style=\"color: #ff0000;\">.\/SteveStevens\/SS-Track02(8).mp3 not renamed: .\/SteveStevens\/SS-Track02.mp3 already exists<\/span><\/p>\n<p><span style=\"color: #ff0000;\">.\/SteveStevens\/SS-Track02(4).mp3 not renamed: .\/SteveStevens\/SS-Track02.mp3 already exists\u00a6<\/span><\/p>\n<p><span style=\"color: #ff0000;\">0<\/span><\/p>\n<p><span style=\"color: #ffffff;\">Proved if the screen output is sent to \/dev\/null there is no StdOut:<\/span><\/p>\n<p><span style=\"color: #0000ff;\">find -regex '.*([0-9]).*' -exec rename \"s\/\\([0-9]\\)\/\/g\" {} +; 2&gt; \/dev\/null<\/span><\/p>\n<p><span style=\"color: #ffffff;\">If confident of your results and you do the changes globally, then the deletes globally, and all has gone well, then the files changed will equal the files deleted and your total file count will be the same.<\/span><\/p>\n<p><span style=\"color: #ffffff;\">If you really persisted you may eventually create a regex that renames many of your awful file names as you like, to a generic, tidier format within the bounds of sanity at least. If so save it and publish it to the web for all to use! There is a script example for MP3s in Server Hacks 1, but I'm not typing it here..!<\/span><\/p>\n<p><span style=\"color: #ffffff;\">So what would be next in the horrendous looking category? Those names with long strings inside {} probably all of these are jpgs actually, but for the exercise:<\/span><\/p>\n<p><span style=\"color: #0000ff;\">find -name '*{*'<\/span><\/p>\n<p><span style=\"color: #ff0000;\">.\/AlbumArt_{866F7EC7-163A-4791-BB41-8081A3C9DF2B\u00a3_Small.jpg<\/span><\/p>\n<p><span style=\"color: #ff0000;\">.\/AlbumArt_{866F7EC7-163A-4791-BB41-8081A3C9DF2B\u00a3_Large.jpg<\/span><\/p>\n<p><span style=\"color: #ffffff;\">You can fight with that one...<\/span><span style=\"color: #ffffff;\">but as an aside here's a great little music char that popped up during this:<\/span><\/p>\n<p><span style=\"color: #ff0000;\">\u00e2,\u00ab<\/span><\/p>\n<p>Try you backup drive with a find for that! Unless you've been to Brasil and know Ivette Sangalo...<\/p>\n<p><span style=\"color: #0000ff;\">find -name *\u00e2,\u00ab*<\/span><\/p>\n<p><span style=\"color: #ff0000;\">.\/IveteSangalo-MTVAoVivo\/PERER\u00c3\u0160lyrics(IveteSangalo)\u00e2,\u00ab_files<\/span><br \/>\n<span style=\"color: #ff0000;\">.\/IveteSangalo-MTVAoVivo\/PERER\u00c3\u0160lyrics(IveteSangalo)\u00e2,\u00ab_files\/PERER\u00c3\u0160lyrics(IveteSangalo)\u00e2,\u00ab.htm<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"pvc_clear\"><\/div>\n<p id=\"pvc_stats_3831\" class=\"pvc_stats all  \" data-element-id=\"3831\" style=\"\"><i class=\"pvc-stats-icon medium\" aria-hidden=\"true\"><svg aria-hidden=\"true\" focusable=\"false\" data-prefix=\"far\" data-icon=\"chart-bar\" role=\"img\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"svg-inline--fa fa-chart-bar fa-w-16 fa-2x\"><path fill=\"currentColor\" d=\"M396.8 352h22.4c6.4 0 12.8-6.4 12.8-12.8V108.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v230.4c0 6.4 6.4 12.8 12.8 12.8zm-192 0h22.4c6.4 0 12.8-6.4 12.8-12.8V140.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v198.4c0 6.4 6.4 12.8 12.8 12.8zm96 0h22.4c6.4 0 12.8-6.4 12.8-12.8V204.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v134.4c0 6.4 6.4 12.8 12.8 12.8zM496 400H48V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v336c0 17.67 14.33 32 32 32h464c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16zm-387.2-48h22.4c6.4 0 12.8-6.4 12.8-12.8v-70.4c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v70.4c0 6.4 6.4 12.8 12.8 12.8z\" class=\"\"><\/path><\/svg><\/i> <img loading=\"lazy\" decoding=\"async\" width=\"16\" height=\"16\" alt=\"Loading\" src=\"https:\/\/stevepedwards.today\/DebianAdmin\/wp-content\/plugins\/page-views-count\/ajax-loader-2x.gif\" border=0 \/><\/p>\n<div class=\"pvc_clear\"><\/div>\n<p>Common Metach\u00adara\u00adcters ^ [ . $ { * ( \\ + ) | ? &lt; &gt; The escape character is usually \\ This Post evolved due to the masochistic desire improve my knowledge of regexs and metachars, possibly using them to tidy up MP3 album\/song titles that can be horrendous looking on the command line, <a href=\"https:\/\/stevepedwards.today\/DebianAdmin\/an-intro-to-metachar-search-methods-wreck-the-mp3s\/\" class=\"more-link\">...<span class=\"screen-reader-text\">\u00a0 An Intro to Metachar Search Methods, Wreck the MP3s<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[],"class_list":["post-3831","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"a3_pvc":{"activated":true,"total_views":1,"today_views":0},"_links":{"self":[{"href":"https:\/\/stevepedwards.today\/DebianAdmin\/wp-json\/wp\/v2\/posts\/3831","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/stevepedwards.today\/DebianAdmin\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/stevepedwards.today\/DebianAdmin\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/stevepedwards.today\/DebianAdmin\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/stevepedwards.today\/DebianAdmin\/wp-json\/wp\/v2\/comments?post=3831"}],"version-history":[{"count":2,"href":"https:\/\/stevepedwards.today\/DebianAdmin\/wp-json\/wp\/v2\/posts\/3831\/revisions"}],"predecessor-version":[{"id":10566,"href":"https:\/\/stevepedwards.today\/DebianAdmin\/wp-json\/wp\/v2\/posts\/3831\/revisions\/10566"}],"wp:attachment":[{"href":"https:\/\/stevepedwards.today\/DebianAdmin\/wp-json\/wp\/v2\/media?parent=3831"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/stevepedwards.today\/DebianAdmin\/wp-json\/wp\/v2\/categories?post=3831"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/stevepedwards.today\/DebianAdmin\/wp-json\/wp\/v2\/tags?post=3831"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}