Sponsored Content
Top Forums Shell Programming and Scripting sed multiline substitution if a condition holds Post 302564701 by CarloM on Friday 14th of October 2011 11:35:44 AM
Old 10-14-2011
I'm not sure I understand your conditions. Is the ELSE ever going to be executed except at the start of the file (i.e. before we encounter the first varx assignment)?

Put another way, what output would you expect from:
Code:
dummy3 = 7; vary = 'option1'; dummy4 = 8;
dummy1 = 5; varx = 'false'; dummy2 = 6;
dummy3 = 7; vary = 'option1'; dummy4 = 8;
dummy3 = 7; vary = 'option1'; dummy4 = 8;
dummy1 = 5; varx = 'true'; dummy2 = 6;
dummy3 = 7; vary = 'option1'; dummy4 = 8;

(with whatever in-between the varx/vary lines)


EDIT: A possible (and rather messy Smilie) awk solution:
Code:
#  cat xx.awk
BEGIN {
        FS=";";
        xval=-1;
        if (NEWVAL1=="") NEWVAL1="'optionA'";
        if (NEWVAL2=="") NEWVAL2="'optionB'";
}
$2 ~ /varx *= *'false'/ {
        xval=0;
        print;
}
$2 ~ /varx *= *'true'/ {
        xval=1;
        print;
}
$2 ~ /vary *= */ {
        if (xval==1) {
                printf ("%s; vary = %s", $1, NEWVAL2);
                x=3;
        }
        else if (xval==0) {
                printf ("%s; vary = %s", $1, NEWVAL1);
                x=3;
        }
        else {
                printf ("%s", $1);
                x=2;
        }
        for (i=x;i<=NF;i++) {
                printf ("; %s", $i);
        }
        printf ("\n");
}
$2 !~ /var[xy] *= */ {
        print;
}

Code:
# cat xx.txt
dummy3 = 7; vary= 'option1'; dummy4 = 8;
% whatever
dummy1 = 5; varx = 'false'; dummy2 = 6;
% whatever
% whatever
dummy3 = 7; vary =  'option1'; dummy4 = 8;
dummy3 = 7; vary='option1'; dummy4 = 8;
% whatever
dummy1 = 5; varx  = 'true'; dummy2 = 6;
% whatever
% whatever
dummy3 = 7; vary ='option1'; dummy4 = 8;
% whatever

Code:
# awk -f xx.awk xx.txt
dummy3 = 7;  vary= 'option1';  dummy4 = 8;
% whatever
dummy1 = 5; varx = 'false'; dummy2 = 6;
% whatever
% whatever
dummy3 = 7; vary = 'optionA';  dummy4 = 8;
dummy3 = 7; vary = 'optionA';  dummy4 = 8;
% whatever
dummy1 = 5; varx  = 'true'; dummy2 = 6;
% whatever
% whatever
dummy3 = 7; vary = 'optionB';  dummy4 = 8;
% whatever


Last edited by CarloM; 10-14-2011 at 01:04 PM..
This User Gave Thanks to CarloM For This Post:
 

9 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

delete multiline string from file using sed.

Hi, I have file which has the following content... GOOD MORNING **********WARNING********** when it kicks from the kickstart, sshd daemon should start at last. (WHEN KICKING ITSELF, NOT AFTER KICKING). /etc/rc3.d/S55sshd ( run level specification for sshd is 55, now I would want to... (4 Replies)
Discussion started by: skmdu
4 Replies

2. Shell Programming and Scripting

Multiline pattern search using sed or awk

Hi friends, Could you please help me to resolve the below issue. Input file :- <Node> <username>abc</username> <password>ABC</password> <Node> <Node> <username>xyz</username> <password>XYZ</password> <Node> <Node> <username>mnp</username> ... (3 Replies)
Discussion started by: haiksuresh
3 Replies

3. UNIX for Dummies Questions & Answers

sed multiline pattern match

How can I write a script that takes a cisco config file and outputs every occurrence of two, or more, pattern matches through the whole config file? For example, out of a config file, i want to print out every line with interface, description and ip address through the whole file, and disregard... (3 Replies)
Discussion started by: knownasthatguy
3 Replies

4. Shell Programming and Scripting

Using sed to pattern match within a particular multiline block and take action

Hi all, This is my first post, so please go easy if I broke some rules. Not accustomed to posting in forums... :) I'm looking for help on pattern matching within a multiline block and looking to highlight blocks/block-ids that do NOT contain a particular pattern. For example an input file... (5 Replies)
Discussion started by: tirodad
5 Replies

5. UNIX for Dummies Questions & Answers

Need Multiline sed help!!

Hey everyone, I'm new to sed and I need to create a script for inserting one line of code at the beginning of every method in a Xcode project (over 6,000 methods). Each method Structure is (+ or -) (Various declarations-- could span multiple lines) ({) I've tried for days, any guidance would be... (2 Replies)
Discussion started by: jimmyz
2 Replies

6. Shell Programming and Scripting

sed failing with multiline html loaded with metacharacters

I have html files (newlines ending in linefeed) with metacharacter-laden multiline text I want to replace. To matters more complicated, the first line may appear elsewhere in the file, so I need these lines as a block. I can replace individual lines, but am failing to come up with anything that can... (2 Replies)
Discussion started by: mauricev
2 Replies

7. Shell Programming and Scripting

Multiline sed

Hi guys, I am fairly comfortable with using the sed command if the string to be replaced is all on a single line. I was wondering is it possible to use sed command in a multiline way ? Say for example I have the below string on 2 different lines: { "key": "brandNameA", ... (3 Replies)
Discussion started by: Junaid Subhani
3 Replies

8. Shell Programming and Scripting

[sed]: Substitute a string with a multiline value

Dear all, I try to replace a string of characters in a file (MyFile.txt) by a multiline value of the variable "Myvar": $ cat MyFile.txt DESCRIPTION '@TargetTable SCHEMA' ( @InputFlowDef ); $ The content of Myvar: $ echo "$Myvar" col1 , col2 , col3 $ (4 Replies)
Discussion started by: dae
4 Replies

9. Shell Programming and Scripting

sed multiline problem

I'm trying to replicate the sed output on p.108 of Sed&Awk,by Doughery & Robbins, 2nd edition. I'm on a Windows 10 Surface Pro, running Cygwin for 64-bit versions of Windows. Input text saved in text file called data_p108.txt: Consult Section 3.1 in the Owner and Operator Guide for a... (9 Replies)
Discussion started by: prooney
9 Replies
All times are GMT -4. The time now is 03:40 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy