Sed, how replace specific symbols between two patterns


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Sed, how replace specific symbols between two patterns
# 1  
Old 03-29-2018
Sed, how replace specific symbols between two patterns

I have a big xmltv file with many lines like:

Code:
<?xml version="1.0" encoding="UTF-8"?>
    <tv>
        <channel id="channel 1 +3HD">
            <display-name lang="it">channel +3HD</display-name>
            <icon src="http://mywebsite.com/dsgbnjfdc65657/channel +3HD.png" />
        </channel>
        <channel id="channel 4 HD">
            <display-name lang="it">channel 4 HD</display-name>
            <icon src="http://mywebsite.com/dsgbnjfdc65657/channel 4 HD.png" />
        </channel>
        <channel id="channel 8 ?? HD">
            <display-name lang="it">channel 8 ?? HD</display-name>
            <icon src="http://mywebsite.com/dsgbnjfdc65657/channel 8 ?? HD.png" />
        </channel>
    </tv>

I don't know why my webserver reject some names of png files, so I am trying to rename it.
I am trying to use the command sed but I am really bad about.
I want replace the spaces, the symbol +, the symbol ? and others with underscore _
I tought to use like a pattern the strings dsgbnjfdc65657/ and .png and modify the spaces, the symbol + and ? between, but I had back only errors...


I tried also with xmlstarlet to replace "spaces" with "_" but also I had only errors

Code:
mlstarlet ed -L -u '//icon/@src=" "' -v _ tv.xml

I really prefer if I can use sed

Can someone help me?

Last edited by Scrutinizer; 03-29-2018 at 03:40 PM.. Reason: quote tags -> code tags
# 2  
Old 03-29-2018
Code:
awk -F\" '/="/ {gsub("[? +]+", "_", $2)} 1' OFS=\" xml


Last edited by rdrtx1; 03-29-2018 at 03:52 PM.. Reason: no need to escape + in bracket (for warnings are set to on)
This User Gave Thanks to rdrtx1 For This Post:
# 3  
Old 03-29-2018
Quote:
Originally Posted by rdrtx1
Code:
awk -F\" '/="/ {gsub("[? \+]+", "_", $2)} 1' OFS=\" xml

I tried bu I have one error

Code:
awk: cmd. line:1: warning: escape sequence `\+' treated as plain `+'

I am using ubuntu, maybe depends about it..
# 4  
Old 03-29-2018
see update.
This User Gave Thanks to rdrtx1 For This Post:
# 5  
Old 03-29-2018
Really thank you, you have one coffee paid if you will visit Italy Smilie
# 6  
Old 03-29-2018
fantastico!
This User Gave Thanks to rdrtx1 For This Post:
# 7  
Old 03-30-2018
Using it I realized one trouble, this command convert spaces and everything also inside the tag <channel id> but works correcty withe the tag <display-name>.
To be more clear, I have one result like this

Code:
<channel id="channel_8____HD">
  <display-name lang="it">channel 8 ?? HD</display-name>
  <icon src="http://mywebsite.com/dsgbnjfdc65657/channel_8____HD.png" />
</channel>

But I need something like this
Code:
<channel id="channel 8 ?? HD">
  <display-name lang="it">channel 8 ?? HD</display-name>
  <icon src="http://mywebsite.com/dsgbnjfdc65657/channel_8____HD.png" />
</channel>

Do you know the solution?
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

sed command on AIX, replace specific characters

Hi, Im using sed on an AIX machine. I am trying to change the 137-139 characters if they are a ' 36'/'000' to a '036'. The positions that need to be changed are fixed. the source data that I have is$cat v.txt 4000422985400050462239065593606500000007422985707771046154054910075641MC0318AMWAY... (9 Replies)
Discussion started by: dsid
9 Replies

2. Shell Programming and Scripting

Using sed to replace a word at specific location

I'm try to change a the prohibit to aix for the lines starting with ssh and emagent and rest should be the same. Can anyone please suggest me how to do that using a shell script or sed passwd account required /usr/lib/security/pam_prohibit passwd session required ... (13 Replies)
Discussion started by: pjeedu2247
13 Replies

3. UNIX for Dummies Questions & Answers

Use sed to replace but only in a specific column of the text file

Hi, I would like to use sed to replace NA to x ('s/NA/x/g'), but only in the 5th column of the space delimited text file, nowhere else. How do I go about doing that? Thanks! (1 Reply)
Discussion started by: evelibertine
1 Replies

4. Shell Programming and Scripting

Replace specific field on specific line sed or awk

I'm trying to update a text file via sed/awk, after a lot of searching I still can't find a code snippet that I can get to work. Brief overview: I have user input a line to a variable, I then find a specific value in this line 10th field in this case. After asking for new input and doing some... (14 Replies)
Discussion started by: crownedzero
14 Replies

5. Shell Programming and Scripting

Using sed to replace a string in a specific position

I asked this before, but my problem got more complicated. Heres what I am trying to do: I'm trying to replace a string at a certain location with another string. Heres the file I'm trying to change: \E I want to replace the escape code at the 3rd line, 2nd column with this escape code... (3 Replies)
Discussion started by: tinman47
3 Replies

6. Shell Programming and Scripting

Sed position specific replace

I'm drawing a blank on how to use sed to replace selectively based on position in the string (vs nth occurence): hello.|there.|how.|are.|you.| I want the period removed in the 3rd item (as defined by the pipe delimiter) if a period is present. So the result in this case would be: ... (2 Replies)
Discussion started by: tiggyboo
2 Replies

7. Shell Programming and Scripting

how to replace specific character , if possible using sed

My script is extracting data from SQl session, however sometimes the result contains one or multiple space after/before any numerical value. e,g . "123","1 34","1 3 45", "43 5" How to remove these unwanted spaces..so that I can get the following result : "123","134",1345","435" (1 Reply)
Discussion started by: mady135
1 Replies

8. Shell Programming and Scripting

Using sed to replace specific character and specific position

I am trying to use sed to replace specific characters at a specific position in the file with a different value... can this be done? Example: File: A0199999123 A0199999124 A0199999125 Need to replace 99999 in positions 3-7 with 88888. Any help is appreciated. (5 Replies)
Discussion started by: programmer22
5 Replies

9. Shell Programming and Scripting

using sed to replace a specific string on a specific line number using variables

using sed to replace a specific string on a specific line number using variables this is where i am at grep -v WARNING output | grep -v spawn | grep -v Passphrase | grep -v Authentication | grep -v '/sbin/tfadmin netguard -C'| grep -v 'NETWORK>' >> output.clean grep -n Destination... (2 Replies)
Discussion started by: todd.cutting
2 Replies

10. Shell Programming and Scripting

How to replace symbols by position using SED

Hi all, I need your help. For example I have string in file.txt: -x -a /tmp/dbarchive_NSS_20081204 -f 900 -l 1 2008/12/04 2008/12/04 So, I need to replace symbols from (for e.g.) position 26 till 33 with symbols which I have in file replace.txt And I have no idea how to do it. If... (1 Reply)
Discussion started by: nypreH
1 Replies
Login or Register to Ask a Question