Visit Our UNIX and Linux User Community


Add text before and after matched string on the same line.


 
Thread Tools Search this Thread
Top Forums UNIX for Beginners Questions & Answers Add text before and after matched string on the same line.
# 1  
Old 03-02-2020
Add text before and after matched string on the same line.

I have a file with many lines. Below I'm highlighting only those line that concerns me from the file.
Code:
....
drwxr-xr-x    4 user1   dba           20480 Feb 25 20:38 /tmp/10203/cust/01
....
drwxr-xr-x    4 user1   dba           20480 Feb 25 20:38 /tmp/10203/cust/01/logs/mtr
....
drwxr-xr-x    4 user1   dba           20480 Feb 25 20:38 /tmp/10203/cust/03/src/files
drwxr-xr-x    4 user1   dba           20480 Feb 25 20:38 /tmp/10203/cust
....

I requirement is to append this string <font color=yellow> and add this string </font> at the end of the found string on the same line.

Thus, if we consider "/tmp/10203/cust/01" the desired output should be changes to the line with the exact match.
<font color=yellow>drwxr-xr-x 4 user1 dba 20480 Feb 25 20:38 /tmp/10203/cust/01</font>

It should not affect the superset string like this one "drwxr-xr-x 4 user1 dba 20480 Feb 25 20:38 /tmp/10203/cust/01/logs/mtr"

I know how to add text before and after the matched string on new line but i do not know how to on the same line with the exact match.

Below is what i tried:

Code:
sed 's/\b\/tmp\/10203\/cust\/01\b/& <\/font>' filename

But it adds the text to a superset string i.e does not exact match.

Can you please suggest ?
# 2  
Old 03-02-2020
Try
Code:
awk -v"PRFX=<font color=yellow>" -v"SUFX=</font>" '{sub ("^.*/tmp/10203/cust/01$", PRFX "&" SUFX)} 1' file
....
<font color=yellow>drwxr-xr-x    4 user1   dba           20480 Feb 25 20:38 /tmp/10203/cust/01</font>
....
drwxr-xr-x    4 user1   dba           20480 Feb 25 20:38 /tmp/10203/cust/01/logs/mtr
....
drwxr-xr-x    4 user1   dba           20480 Feb 25 20:38 /tmp/10203/cust/03/src/files
drwxr-xr-x    4 user1   dba           20480 Feb 25 20:38 /tmp/10203/cust
 ....




EDIT: ... and your approach, adapted:

Code:
sed 's/^.*\/tmp\/10203\/cust\/01$/<font color=yellow>&<\/font>/' file

# 3  
Old 03-02-2020
The problem I face is that the match pattern comes from a variable thus using escape charecters becomes difficult and i get the below error:

Code:
sed 's/^.*/tmp/10203/cust/01$/<font color=yellow>&</font>/'  /app/test.html 
sed: -e expression #1, char 20: unknown option to `s'

Is it possible to overcome this ?
# 4  
Old 03-02-2020
That was not mentioned in your specification. How about supplying a decent, complete problem description from the start?


Did you test the awk proposal? How far did it get you? With patterns supplied in variables?


As to your sed question: a simple look into the resp. documentation helps: info sed:


Quote:
3.3 The 's' Command
===================

The 's' command (as in substitute) is probably the most important in
'sed'

.
.
.
The '/' characters may be uniformly replaced by any other single
character within any given 's' command. ...
So - try e.g.
Code:
sed 's#^.*/tmp/10203/cust/01$#<font color=yellow>&</font>#' file

EDIT: or, in the variables' case,

Code:
$ PRFX='<font color=yellow>'
$ SUFX='</font>'
$ sed "s#^.*/tmp/10203/cust/01\$#${PRFX}&${SUFX}#" file

Be aware that with double quotes, you will / may need to escape "sed / regex special characters" like the $ sign, or others.

Last edited by RudiC; 03-02-2020 at 09:06 AM..

Previous Thread | Next Thread
Test Your Knowledge in Computers #256
Difficulty: Easy
MILNET gave birth to NIPRNet, which was used to transmit sensitive but unclassified data between internal users and also provide those users with a gateway to the commercial Internet.
True or False?

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

Search String, Out matched text and input text for no match.

I need to search a string for some specific text which is no big deal using grep. My problem is when the search fails to find the text. I need to add text like "na" when my search does not match. I have tried this command but it does not work when I put the command in a loop in a bash script: ... (12 Replies)
Discussion started by: jojojmac5
12 Replies

2. UNIX for Dummies Questions & Answers

Commenting a line matched with a specific string in a file

Hi, I would like to comment a line that matched a string "sreenivas" in a file without opening it. Thanks in advance. Regards, Sreenivas (3 Replies)
Discussion started by: raosr020
3 Replies

3. Shell Programming and Scripting

Search a string in a text file and add another string at the end of line

Dear All I am having a text file which is having more than 200 lines. EX: 001010122 12000 BIB 12000 11200 1200003 001010122 2000 AND 12000 11200 1200003 001010122 12000 KVB 12000 11200 1200003 In the above file i want to search for string KVB... (5 Replies)
Discussion started by: suryanarayana
5 Replies

4. Shell Programming and Scripting

Search a string in a text file and add another string at the particular position of a line

I am having a text file which is having more than 200 lines. EX: 001010122 12000 BIB 12000 11200 1200003 001010122 2000 AND 12000 11200 1200003 001010122 12000 KVB 12000 11200 1200003 In the above file i want to search for string KVB and add/replace... (1 Reply)
Discussion started by: suryanarayana
1 Replies

5. UNIX for Advanced & Expert Users

Add a line after last matched expression

I thought this would be easy to Google, but I am having trouble getting a clean result that I can understand. I simply want to insert the the line: My Network 192.168.1.1 After the last line that begins with ACL localnet (15 Replies)
Discussion started by: glev2005
15 Replies

6. Shell Programming and Scripting

Print only matched string instead of entire line

Hi, I have a file whose lines are something like Tchampionspsq^@~^@^^^A^@^@^@^A^A^A^@^@^@^@^@^@^@^@^@^@^A^@^@^@^@^?^@^@^@^@^@^@^@?^@^@^@^@^@^@pppsq^@~^@#@^@^@^@^@^@^Hw^H^@^@^@^K^@^@^@^@xp^At^@^FTtime2psq^@ ~^@^^^A^@^@^@^B^A I need to extract all words matching T*psq from the file. Thing is... (4 Replies)
Discussion started by: shekhar2010us
4 Replies

7. Shell Programming and Scripting

Help required on joining one line above & below to the pattern matched string line.

Hi Experts, Help needed on joining one line above & below to the pattern matched string line. The input file, required output is mentioned below Input file ABCD DEFG5 42.0.1-63.38.31 KKKK iokl IP Connection Available ABCD DEFG5 42.0.1-63.38.31 ... (7 Replies)
Discussion started by: krao
7 Replies

8. UNIX for Advanced & Expert Users

capture data from matched string/line

Hi, I have a query as follows : suppose I am matching a string in a file say "start from here" and I want to pick up 'n' number of lines () from the matched string. Is there any way to do that ? 1) going forward I want to do this for every match for the above string 2) or limit this to... (2 Replies)
Discussion started by: sumoka
2 Replies

9. Shell Programming and Scripting

save every line in log file with matched string

i have been doing this script to match every line in a current log file (access_log) with strings that i list from a path (consist of 100 of user's name ex: meggae ).. and then make a directory of every string from the text file (/path/meggae/) --->if it matched.. then print every line from the... (3 Replies)
Discussion started by: meggae
3 Replies

10. UNIX for Advanced & Expert Users

Command to display nth line before the string is matched.

All, Is there any way out to display the nth line before the string is matched ??? Eg : If i have a file which has the following contents and if i want to get the 3rd line before the string is matched a b c d e f if i give the input as f and lines before the match as 3 then it should... (5 Replies)
Discussion started by: helper
5 Replies

Featured Tech Videos