I have a file that contains data that looks like this :
WWWWWWWWWWWWWW;XXXXXXXXXXXXXXXXXXXX;ZZZZZZZZZZZZZZ;EE;/usr/lib/systemd/system/snapd.socket
WWWWWWWWWWWWWW;XXXXXXXXXXXXXXXXXXXX;ZZZZZZZZZZZZZZ;EE;/usr/lib/systemd/system/sysinit.target
WWWWWWWWWWWWWW;XXXXXXXXXXXXXXXXXXXX;ZZZZZZZZZZZZZZ;EE;/usr/lib/systemd/system/sysinit\target
Sometimes errors appear in this file, they look like this ;
\WWWWWWWWWWWWWW;\XXXXXXXXXXXXXXXXXXXX;\ZZZZZZZZZZZZZZ;EE;/usr/lib/systemd/system/sysinit\target
As you can see ther is backslashes that makes my file very hard to parse after.
I tried to make them disappeard with :
cat ligne.txt | tr "\\" "\0"
But it affects the file names containing \
and I want to keep the file name the same.
So I tried to use the condition only the \
with a semicolon next to it.
cat ligne.txt | tr ";\\" "\0"
but it gives me this :
WWWWWWWWWWWWWWXXXXXXXXXXXXXXXXXXXXZZZZZZZZZZZZZZEE/usr/lib/systemd/system/sysinittarget
The data is destroyed.
So i tried this :
cat ligne.txt | tr ";\\" ";"
but it does this witch is worst :
\WWWWWWWWWWWWWW;;XXXXXXXXXXXXXXXXXXXX;;ZZZZZZZZZZZZZZ;;EE;;/usr/lib/systemd/system/sysinit;target
This brings me to the the question: how does tr
process \\
and ;
in parameters ?
Try with sed
:
cat ligne.txt | sed -e 's/;\\/;/g'