Sponsored Content
Top Forums UNIX for Beginners Questions & Answers Awk/sed to replace variable in file Post 303041209 by RudiC on Monday 18th of November 2019 09:03:05 AM
Old 11-18-2019
A little clumsy as you have to take care for every single special case - may benefit from some polishing:
Code:
awk '
BEGIN   {PAT = "<<[^>]*>>"
        }

        {match ($0, PAT)
         NXT = RSTART + RLENGTH
         FN = substr ($0, RSTART+2, RLENGTH-4)
         while (0 < getline T1[++CNT1] < FN );
         close (FN)
         match (substr ($0, NXT), PAT)
         FN = substr ($0, NXT+RSTART+1, RLENGTH-4)
         while (0 < getline T2[++CNT2] < FN );
         close (FN)

         if (CNT1==1)   print
         else           for (i=1; i<CNT1; i++)   if (CNT2>1)    for (j=1; j<CNT2; j++)  {TMP = $0
                                                                                         sub (PAT, T1[i], TMP)
                                                                                         sub (PAT, T2[j], TMP)
                                                                                         print TMP
                                                                                        }
                                                 else                                   {TMP = $0
                                                                                         sub (PAT, T1[i], TMP)
                                                                                         print TMP
                                                                                        }
         CNT1 = CNT2 = 0
        }
' file


@nezabudka: nice, witty solution! But - shouldn't it be print $1 d $3 b $5 in lieu of what is in your post?

Last edited by RudiC; 11-19-2019 at 08:32 AM.. Reason: Closed 2nd FN too early - corrected.
This User Gave Thanks to RudiC For This Post:
 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Find and replace with variable using sed or awk

hi, i have file say email.temp looks like Bell_BB 17 Bell_MONTHLY 888 SOLO_UNBEATABLE 721 and another file r3 Bell BB,Bell_BB Bell,Bell_MONTHLY SOLO,SOLO_UNBEATABLE i want email.temp files $1 say Bell_BB should be replaced by r3 Bell BB and Bell_MONTHLY by... (2 Replies)
Discussion started by: raghavendra.cse
2 Replies

2. Shell Programming and Scripting

using file-and-replace sed command with the use of a variable?

Ok, so, let's say I have the variable $GMAILID....How can I use it with sed command so to replace a string in a file? e.g.: sed -i 's/$GMAILID/test@gmail.com/' /home/$USER/Desktop/sendmail (4 Replies)
Discussion started by: hakermania
4 Replies

3. Shell Programming and Scripting

Sed or awk for batch replace file name

Can you please point me in the correct direction? I need a line or script to run though a given directory and find all files with "@domain.local" in there names and simple remove that. For example if the files were named 1234@domain.local the file would then become 1234. (1 Reply)
Discussion started by: binary-ninja
1 Replies

4. Shell Programming and Scripting

using sed/awk to replace a block of text in a file?

My apologies if this has been answered in a previous post. I've been doing a lot of searching, but I haven't been able to find what I was looking for. Specifically, I am wondering if I can utilize sed and/or awk to locate two strings in a file, and replace everything between those two strings... (12 Replies)
Discussion started by: kiddsupreme
12 Replies

5. Red Hat

How to pass value of pwd as variable in SED to replace variable in a script file

Hi all, Hereby wish to have your advise for below: Main concept is I intend to get current directory of my script file. This script file will be copied to /etc/init.d. A string in this copy will be replaced with current directory value. Below is original script file: ... (6 Replies)
Discussion started by: cielle
6 Replies

6. Shell Programming and Scripting

sed or awk to replace a value in a certain line from another file containing a string

Hi experts, In my text file I have the following alot of lines like below. input.k is as follows. 2684717 -194.7050476 64.2345581 150.6500092 0 0 2684718 -213.1575623 62.7032242 150.6500092 0 0 *INCLUDE $# filename... (3 Replies)
Discussion started by: hamnsan
3 Replies

7. Shell Programming and Scripting

Replace value of a variable in a file through script using sed

Hi, I am trying to replace the value of a variable in a file through another script. Example: Filename : abc.txt contents: a=10 b=20 c=30 Need to change the value of, say, b - Tried using the following: sed "s/${b}/15/g" abc.txt Have tried various forms of sed (with single quotes,... (4 Replies)
Discussion started by: rituparna_gupta
4 Replies

8. Shell Programming and Scripting

sed/awk script to replace only FIRST comment in the file

My first comment on every file contains the license message. I want to replace with a new license message. I used the below sed script, which replaces all comments. What is the modification or any other method with awk script for the below to edit only the first comment(license message)? #sed -f... (1 Reply)
Discussion started by: vpshastry
1 Replies

9. Shell Programming and Scripting

How to replace a string with a variable in a file using sed?

I have a file having some text like: PATH_ABC=/user/myLocation I have to replace "/user/myLocation" with a session variable say, $REPLACE_PATH, where $REPLACE_PATH=/user/myReplaceLocation The following sed command is not working. It is writing PATH_ABC=$REPLACE_PATH in the file ... (2 Replies)
Discussion started by: SKhan
2 Replies

10. Programming

How to replace the complex strings from a file using sed or awk?

Dear All, I am having a requirement to find the difference between 2 files and generate a discrepancy report out of it as an html page. I prefer using diff -y file1 file2 since it gives user friendly layout to know any discrepancy in the record and unique records among the 2 file. Here's how it... (12 Replies)
Discussion started by: Badhrish
12 Replies
IO::Handle::Prototype::Fallback(3pm)			User Contributed Perl Documentation		      IO::Handle::Prototype::Fallback(3pm)

NAME
IO::Handle::Prototype::Fallback - Create IO::Handle like objects using a set of callbacks. SYNOPSIS
my $fh = IO::Handle::Prototype::Fallback->new( getline => sub { my $fh = shift; ... }, ); DESCRIPTION
This class provides a way to define a filehandle based on callbacks. Fallback implementations are provided to the extent possible based on the provided callbacks, for both writing and reading. SPECIAL CALLBACKS
This class provides two additional methods on top of IO::Handle, designed to let you implement things with a minimal amount of baggage. The fallback methods are all best implemented using these, though these can be implemented in terms of Perl's standard methods too. However, to provide the most consistent semantics, it's better to do this: IO::Handle::Prototype::Fallback->new( __read => sub { shift @array; }, ); Than this: IO::Handle::Prototype::Fallback->new( getline => sub { shift @array; }, ); Because the fallback implementation of "getline" implements all of the extra crap you'd need to handle to have a fully featured implementation. __read Return a chunk of data of any size (could use $/ or not, it depends on you, unlike "getline" which probably should respect the value of $/). This avoids the annoying "substr" stuff you need to do with "read". __write $string Write out a string. This is like a simplified "print", which can disregard $, and "$" as well as multiple argument forms, and does not have the extra "substr" annoyance of "write" or "syswrite". WRAPPING
If you provide a single reading related callback ("__read", "getline" or "read") then your callback will be used to implement all of the other reading primitives using a string buffer. These implementations handle $/ in all forms ("undef", ref to number and string), all the funny calling conventions for "read", etc. FALLBACKS
Any callback that can be defined purely in terms of other callbacks in a way will be added. For instance "getc" can be implemented in terms of "read", "say" can be implemented in terms of "print", "print" can be implemented in terms of "write", "write" can be implemented in terms of "print", etc. None of these require special wrapping and will always be added if their dependencies are present. GLOB OVERLOADING
When overloaded as a glob a tied handle will be returned. This allows you to use the handle in Perl's IO builtins. For instance: my $line = <$fh> will not call the "getline" method natively, but the tied interface arranges for that to happen. perl v5.10.1 2009-09-29 IO::Handle::Prototype::Fallback(3pm)
All times are GMT -4. The time now is 11:23 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy