Search partial string in a file and replace the string - UNIX


 
Thread Tools Search this Thread
Top Forums UNIX for Beginners Questions & Answers Search partial string in a file and replace the string - UNIX
# 1  
Old 11-07-2019
Search partial string in a file and replace the string - UNIX

I have the below string which i need to compare with a file and replace this string in the file which matches closely. Can anyone help me on this.
Code:
string(Scenario 1)- user::r--,user::ourfrd:r--
String(Scenario 2)- user::r--

File
****
Code:
# file: /local/Desktop/myfile
# owner: me
# group: mygroup
user::rwx
user:myfrd:rwx
user:hisfrd:r-x
group::r-x
group:mygroup:rwx
mask::rwx
other::r-x

Required Output :
***************

For Scenario-1 :
Code:
# file: /local/Desktop/myfile
# owner: me
# group: mygroup
user::r--
user:myfrd:rwx
user:hisfrd:r-x
user::ourfrd:r--
group::r-x
group:mygroup:rwx
mask::rwx
other::r-x

For Scenario-2 :
Code:
# file: /local/Desktop/myfile
# owner: me
# group: mygroup
user::r--
user:myfrd:rwx
user:hisfrd:r-x
group::r-x
group:mygroup:rwx
mask::rwx
other::r-x


Last edited by vbe; 11-07-2019 at 07:37 AM.. Reason: code tags please
# 2  
Old 11-07-2019
Hi. Welcome.

What operating system exactly and what shell are you using?

What code have you written so far to attempt to solve this?
# 3  
Old 11-07-2019
@ Neo : Windows os only and im using Unix Shell/Bash scripting.
I have applied the below logic to eliminate comma if available in the string and then kept each string in array. Then I tried to search it in the file,but replacing the contents in the file is not working as expected.

For Scenario-1 :
Code:
#/bin/bash
STRING="user::r--,user:ourfrd:r--"
array=`echo $STRING | awk -F ',' '{ s = $1; for (i = 2; i <= NF; i++) s = s "\n"$i; print s; }'`
for word in ${array}
do
        sed -r -e 's/${array}[^{array}]+//g' file.txt
done

For Scenario-2 :
Code:
#/bin/bash
STRING="user::r--"
array=`echo $STRING | awk -F ',' '{ s = $1; for (i = 2; i <= NF; i++) s = s "\n"$i; print s; }'`
for word in ${array}
do
        sed -r -e 's/${array}[^{array}]+//g' file.txt
done

# 4  
Old 11-07-2019
Not sure I understand your request. Does this work for your scenario 1 2?
Code:
echo "${STRING//,/$'\n'}" | awk -F: 'FNR==NR {T[$1,$2] = $0; next} ($1,$2) in T {$0 = T[$1,$2]} 1' - file


Last edited by RudiC; 11-08-2019 at 07:35 AM.. Reason: Revised the scenario number...
This User Gave Thanks to RudiC For This Post:
# 5  
Old 11-08-2019
@Reduic : Please find the below explanation on my requirements for scenario-1.

Input parameter:
********************
Scenario-1:

STRING="user::r--,user::ourfrd:r--"

Data available in File:
**************************
# file: /local/Desktop/myfile
# owner: me
# group: mygroup
user::rwx
user:myfrd:rwx
user:hisfrd:r-x
group::r-x
group:mygroup:rwx
mask::rwx
other::r-x

Expected Results - Modified File data
**********************************************
For Scenario-1:
# file: /local/Desktop/myfile
# owner: me
# group: mygroup
user::r--
user:myfrd:rwx
user:hisfrd:r-x
user:ourfrd:r--
group::r-x
group:mygroup:rwx
mask::rwx
other::r-x

Note: In the above result, the string "user:ourfrd:r--" is added newly to the file since it is not available already in file. Only the partially matching strings to be replaced like how we have "user::rwx" exists in file and the first few characters "user::" is getting matched with new input parameter "user::r--". so "user::r--" needs to be updated in file. This is what im trying for, hope now my requirement is clear to you ..
# 6  
Old 11-08-2019
Sorry - I meant scenario 2 in my former post. For your scenario 1, try


Code:
echo "${STRING//,/$'\n'}" | awk -F: '
FNR==NR         {T[$1,$2] = $0
                 next
                }
($1,$2) in T    {print T[$1,$2]
                 delete T[$1,$2]
                 next
                }
LAST &&
$1 != LAST      {for (t in T)   {print T[t]
                                 delete T[t]
                                }
                }
                {LAST = $1
                }
1
' - file


Last edited by RudiC; 11-08-2019 at 07:44 AM..
# 7  
Old 11-08-2019
@Rudic : I am looking for solution for both the scenario's.

--- Post updated at 12:13 PM ---

@Rudic : For scenario-1, it is not working as expected. Instead of comparing the existing one, it is appending the strings in first line.

For scenario-2 which you have said initially worked partially. i.e. For partially matching pattern it updated with new strings which we passed as Input parameter. If the complete strings is not matched then it has to be added to the file as new record which doesn't work.
Login or Register to Ask a Question

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

Search for a string,delete the line and replace with new string in a file

Hi Everyone, I have a requirement in ksh where i have a set of files in a directory. I need to search each and every file if a particular string is present in the file, delete that line and replace that line with another string expression in the same file. I am very new to unix. Kindly help... (10 Replies)
Discussion started by: Pradhikshan
10 Replies

2. Shell Programming and Scripting

How to replace partial of string in file?

Hi Guys, I need replace part of string in a file. for example: ABC=123 CDE=122 DEF=456 ABC=123 DED=333 ABC=123 I need replace the value after ABC=, highlighted in red. I want to get following result; ABC=456 CDE=122 DEF=456 ABC=456 DED=333 ABC=456 Anybody can help me this. ... (8 Replies)
Discussion started by: ken6503
8 Replies

3. Shell Programming and Scripting

Search for a string in a file and replace

I have file t1.log Contents of t1.log file Number of records processed: Number of records rejected: Error : xyz .......... abc .......... aaa _] start time : end time : Please let me know how i can remove the contents highlighted in red in the t1.log file. Thanks Sam (3 Replies)
Discussion started by: sam777
3 Replies

4. Shell Programming and Scripting

How to replace partial string

I have a list of strings in file: 10 10 AAA 120 13 BBBBB 23 11 CCCCC 11 32 DDDDDD I want to replace first column of the text such as: 10, 129, 23, 11 with 11, 22, 33, 44. I can do line by line, but just not sure how to replace partial string without... (1 Reply)
Discussion started by: ford99
1 Replies

5. UNIX for Dummies Questions & Answers

Search a string in the file and then replace another string after that position

Hi I am looking for a particular string in a file.If the string exists, then I want to replace another string with some other text.Once replaced, search for the same text after that character position in the file. :wall: E.g: Actual File content: Hello Name: Nitin Raj Welcome to Unix... (4 Replies)
Discussion started by: dashing201
4 Replies

6. Shell Programming and Scripting

Help needed :Search and Replace a string pattern with empty in an xml file in unix

Search and Replace a string pattern with empty in an xml file in unix: My xml file would be like this : <Accounts><Name>Harish</Name><mobile>90844444444444445999 </mobile><TRIG>srcujim-1</TRIG></Accounts><Accounts><Name>Satish</Name><mobile>908999</mobile><TRIG>ettertrtt-1</TRIG></Accounts> ... (1 Reply)
Discussion started by: harish_s_ampeo
1 Replies

7. Shell Programming and Scripting

Search, replace string in file1 with string from (lookup table) file2?

Hello: I have another question. Please consider the following two sample, tab-delimited files: File_1: Abf1 YKL112w Abf1 YAL054c Abf1 YGL234w Ace2 YKL150w Ace2 YNL328c Cup9 YDR441c Cup9 YDR442w Cup9 YEL040w ... File 2: ... ABF1 YKL112W ACE2 YLR131C (9 Replies)
Discussion started by: gstuart
9 Replies

8. UNIX for Dummies Questions & Answers

Search for a string and replace the searched string in the same position in samefile

Hi All, My requisite is to search for the string "0108"(which is the year and has come in the wrong year format) in a particular column say 4th column in a tab delimited file and then replace it with 2008(the correct year format) in the same position where 0108 was found in the same file..The... (27 Replies)
Discussion started by: ganesh_248
27 Replies

9. Shell Programming and Scripting

Search for a string and replace the searched string in the same position

Hi All, My requisite is to search for the string "0108"(which is the year and has come in the wrong year format) in a particular column say 4th column in a tab delimited file and then replace it with 2008(the correct year format) in the same position where 0108 was found..The issue is the last... (15 Replies)
Discussion started by: ganesh_248
15 Replies
Login or Register to Ask a Question