| Newsgroups |
gmane.editors.sed.user |
| Message-ID |
<[email protected]> |
Greetings.
Sorry for bad English
dir /b /s | sed -r -e "h;s/.*\\//;s/[ÄÜÖ]/\0e/g;s/ß/ss/g;y/ÄÜÖäüö&\d183/AOUaou+-/;s/([-+_.\x20]){2,}/\1/g;s/\x20*.?([-+_.]).?\x20*/\1/g;H;x;s/^/ren \x22/;s/$/\x22/;s/\n/\x22\x20\x22/"
Main fragment -
"h;s/.*\\//;H;x;s/^/ren \x22/;s/$/\x22/;s/\n/\x22\x20\x22/"
Copy to hold space; delete all up to last slash; add to hold space (with \n as delimiter) ; switch hold and pattern space; add text to begin of string; add text to end of string; replace \n
Best regards
---In [email protected], <zharif@...> wrote :
Because no one replied I assume that my request was not clear.
Maybe I used wrong phrasing or yahoo ate some of my code?
So let me try to re-compose my request with a simple example.
I do have an inputfile containing file pathes of files inside a directory.
inputfile example:
D:\dir1\subdir1\2006_A programme.-.a randomized controlled trial.pdf
D:\dir1\subdir1\2011_Schürer-Low Back Pain.pdf
...
...
I want sed to print the full filepath+filename+extension,
then to do some substitutions to the FILENAMES ONLY and
append these substituted filename into the same line (separated by a
space).
Substitutions in this example:
- replace ".-." with "-"
- replace umlaut "ü" or "Ü" with "ue" or "Ue"
Desired output should be like this:
D:\dir1\subdir1\2006_A programme.-.a randomized controlled trial.pdf
2006_A programme-a randomized controlled trial.pdf
D:\dir1\subdir1\2011_Schürer-Low Back Pain.pdf 2011_Schuerer-Low Back
Pain.pdf"
...
...
Is this somehow possible via oneliner or maybe by a sed script?
Again, thanks for any reply
Zharif
Am 08.11.2015 um 16:46 schrieb zharif@... mailto:zharif@... [sed-users]:
> Env: German Win8.1x64 with sed v407 from UnxUtils.
>
> I want to queries full filepathes and finds any filename (+extension)
> containing umlauts and some special characters. Goal is to do some
> substitutions for the filenames only and to redirect results into a new
> file.
> This is what I have so far (working):
>
> Command to get a list of filenames that contain umlauts and some special
> chars (piping the DIR command):
> DIR /B /S /A:-D "E:\"|sed --text -n
> "s/^\(.*\\\)\(.*[äüößÄÜÖß&\d183]\+[^\\]\+\)$/\1\2/p" >> OutFile1
>
> The resulting file should:
> 1. contain a renaming command (REN+space) at start of each line in OutFile1.
> 2. contain the filename of the filepath only at end of each line.
> Example: REN "e:\XYZ\XY\2011 - Schürer _Low Back Pain.pdf"
> "2011-Schuerer_Low Back Pain.pdf"
>
> This is my loop command in which substitutions are made to the original
> file. Output is redirected to a new file:
> FOR /F "tokens=1* delims= " %%a IN (OutFile1) DO (
> FOR /F "tokens=1* delims= " %%A IN ('ECHO "%%a"^|sed --text
> "s/Ä/Ae/g;s/ä/ae/g;s/Ü/Ue/g;s/ü/ue/g;s/Ö/Oe/g;s/ö/oe/g;s/ß/ss/g;s/&/+/g;s/\d183/-/g;s/[[:space:]]*\([-+_.]\)\{1,\}[[:space:]]*/\1/g;s/\([-+_.]\)\{2,\}/\1/g;s/[[:space:]]\{2,\}/
> /g"') DO (ECHO REN "%%a" "%%~nxA" >> %2)
> )
> %%~nxA prints only the filename(n)+extension(x) of the full path(A).
>
> This code is increddible slow for long files (as always for loops).
> Questions:
> 1. I'm sure it must be possible to solve this task with sed only without
> using a FOR loop. I'm runnig out of ideas here.
> 2. What about the used sed commands? In need of being improved? Or are
> they even faulty?
>
> 3. Another one; is sed able to count and print characters for each line
> of a file (similar to wc)?
>
> Thanks much in advance for any reply
> Zharif
>
>
>
> ------------------------------------
> Posted by: zharif@... mailto:zharif@...
> ------------------------------------
>
[Non-text portions of this message have been removed]