Visit Our UNIX and Linux User Community


Changing array of data by sed


 
Thread Tools Search this Thread
Top Forums UNIX for Beginners Questions & Answers Changing array of data by sed
# 1  
Old 03-03-2020
Changing array of data by sed

Hi all,
Hope you are fine all

I want to change a certain field in specific array for example I got a file like below:

Code:
<alarmsend>yes</alarmsend>
<server>Hajk</server>
<type>5</type>
<alarmsend>yes</alarmsend>
<server>Hajk</server>
<type>1</type>
<alarmsend>yes</alarmsend>
<server>Hajk</server>
<type>3</type>
<alarmsend>yes</alarmsend>
<server>Hajk</server>
<type>5</type>

So I want to change alarm send to No for all type 5 for example to get out put as below

Code:
<alarmsend>no</alarmsend>
<server>Hajk</server>
<type>5</type>
<alarmsend>yes</alarmsend>
<server>Hajk</server>
<type>1</type>
<alarmsend>yes</alarmsend>
<server>Hajk</server>
<type>3</type>
<alarmsend>no</alarmsend>
<server>Hajk</server>
<type>5</type>

Thanks in advance

Moderator's Comments:
Mod Comment Please use code tags for your code and data, thanks

Last edited by vbe; 03-03-2020 at 11:33 AM..
This User Gave Thanks to teefa14 For This Post:
# 2  
Old 03-04-2020
Hello teefa14,

On UNIX.com we encourage users to do add their efforts which they have put in order to solve their own problems, so kindly do add the same(in form of code in CODE TAGS) in your question and let us know then.

Thanks,
R. Singh
# 3  
Old 03-04-2020
What I've used but not working fine

Code:
cat source | awk 'BEGIN {line=""} {if( $0 ~ /<\/alarmsend>/ ){line=line""$0;print line ;line =""} else {line=line""$0"@@"}}'  | grep <type>5</type>| sed -e 's#<alarmsend>"yes"#<alarmsend>"no"#' | tr "@@" "\n"  | grep "<" > file

And another one with grep -v then append both
That's it so I want to see another one but from another prospective
This User Gave Thanks to teefa14 For This Post:
# 4  
Old 03-04-2020
First thing to do is: get rid of syntax errors in your code.


For your problem, try
Code:
tac file | awk '/<type>5/ {T5 = 1} /<alarmsend/ && T5 {sub (/yes/, "no"); T5 = 0} 1' | tac
<alarmsend>no</alarmsend>
<server>Hajk</server>
<type>5</type>
<alarmsend>yes</alarmsend>
<server>Hajk</server>
<type>1</type>
<alarmsend>yes</alarmsend>
<server>Hajk</server>
<type>3</type>
<alarmsend>no</alarmsend>
<server>Hajk</server>
<type>5</type>

This User Gave Thanks to RudiC For This Post:
# 5  
Old 03-05-2020
Thanks alot
# 6  
Old 03-05-2020
Code:
sed 'N;N;/5/ s/yes/no/' file
sed '/^<alarmsend/{N;N;\%5</type>$% s/yes/no/}' file

--- Post updated at 13:44 ---

If you complicate the task as much as possible
Code:
sed -r '/^<alarm/ {:1;N;\%</type>$%!b1}; s%^(<alarmsend>)yes(.*5</type>$)%\1no\2%' file

These 2 Users Gave Thanks to nezabudka For This Post:
# 7  
Old 03-08-2020
Thanks alot

Previous Thread | Next Thread
Test Your Knowledge in Computers #663
Difficulty: Medium
American computer programmer Timothy Paterson wrote the original operating system for the Intel 8086 microprocessor in 1980, initially calling it QDOS (Quick and Dirty Operating System).
True or False?

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Changing time-stamp with sed

Hi ! I try to change a time-stamp hh:mm:ss allways to full ten-minutes. example: 12:51:03 to 12:50:03 sed 's/::/:{0-5}0:/g' file.txt but it will not work propperly, because the minute-decade will be replaced with the bracket-term {0-5}. Can someone please give me a hint? Thanks in... (6 Replies)
Discussion started by: IMPe
6 Replies

2. UNIX for Dummies Questions & Answers

Changing data format from column into array

I have a file containing numbers in a column like: 10.5 16.3 15.7 2.3 46.8 3.3 . . . and I was wondering if there was a way to make it show up in an array form like: 10.5 2.3 16.3 46.8 15.7 3.3 Let's say I want to make a new column every 100 values. How can I do... (8 Replies)
Discussion started by: ShiGua
8 Replies

3. Shell Programming and Scripting

sed/awk changing values

Can somebody help me out and provide me with a SED or AWK solution that converts TO_DATE CLAUSE -> TIMESTAMP I need to keep the PARTION value (HISTORY_20110417) and DATE/TIME value (2011-04-18 00:00:00) the same for every line PARTITION HISTORY_20110417 VALUES LESS THAN (TO_DATE('... (3 Replies)
Discussion started by: BeefStu
3 Replies

4. UNIX for Dummies Questions & Answers

Changing Text with sed or awk

I'm changing some html code on multiple web pages and I need to match particular phrases but keep some text within each phrase. E.G. I need to change this line: <DIV id="heading">Description:</DIV> into <span class="hlred">Description:</span><br /> The text "Description:" may... (2 Replies)
Discussion started by: hal8000
2 Replies

5. Shell Programming and Scripting

changing c comments to c++ style with sed

Hi everyone, I've got a problem with converting C comments ( /* */ ) into C++ style ( // ) in some source file with sed. So far I've dealt with comments on one line, but I don't know how to convert when it is over multiple lines ... So I already have something like this: comments.sed ... (8 Replies)
Discussion started by: kolage
8 Replies

6. UNIX for Dummies Questions & Answers

changing data into matrix form

Hi, I have a file whose structure is like this 7 7 1 2 3 4 5 1 3 4 8 6 1 4 5 6 0 2 6 8 3 8 2 5 7 8 0 5 7 9 4 1 3 8 0 2 2 3 5 6 8 basically first two row tell the number of rows and column but the data following them are not arranged in that format. now i want to create another... (1 Reply)
Discussion started by: g0600014
1 Replies

7. Shell Programming and Scripting

sed and changing the file itself

hello I have this: sed -e "s/install_location=....../g" -e "s/hostname=....../g" -e "s/server_name=....../y" input.txt it will display on the screen what have changed. however I want to change file input.txt. Any idea other than doing redirection (>) thx (2 Replies)
Discussion started by: melanie_pfefer
2 Replies

8. UNIX for Dummies Questions & Answers

Changing the order using sed

I have a text "abc def ghi" and I want to get it as "def abc ghi" I am using this echo "abc def ghi" | sed 's/\(*\)\(*\)/\2\1/' But I am not able to get the output, could anyone help me. Thanks (9 Replies)
Discussion started by: venu_nbk
9 Replies

9. Shell Programming and Scripting

Changing Special Characters Using Sed

Hi. Does anyone know how to use the sed command to change the special border characters on this .per file. I have to edit about 80 .per files. I need a sed script to change the below 3 and A characters. 旼컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴 Test Islands, Office of Public Health -- WIC... (4 Replies)
Discussion started by: cstovall
4 Replies

10. UNIX for Dummies Questions & Answers

Changing text with sed?

Hi everyone, Having trouble with sed. I searched the board and found some stuff, but still unclear. I have a file named "userfile" which stores the users info in this form: email:username:password: I want the user to be able to change their password. i tried with sed s/oldpass/newpass/g... (2 Replies)
Discussion started by: primal
2 Replies

Featured Tech Videos