ramky79
October 26, 2010, 11:34am
1
Hi,
I have the following text file:
facdat=$SPDR_SHARED_SCRIPTS/mdb_facdat.pl -s fnma;
upddte=$AGENCY_SCRIPTS/get_upddte.pl -f $EMBS_DAILY_DIR/$filenm
$SASRUN $AGENCY_SCRIPTS/fnma_daily_factors.sas -sysparm "$facdat $upddte"
$SASRUN $AGENCY_SCRIPTS/fnma_daily_addtn.sas -sysparm "$facdat $upddte"
repret=$SPDR_SHARED_SCRIPTS/mdb_facdat.pl -s $sectyp -r Y
I want to replace anything before '$AGENCY_SCRIPTS' and '$SPDR_SHARED_SCRIPTS' I want my output to look like below
$SPDR_SHARED_SCRIPTS/mdb_facdat.pl -s fnma;
$AGENCY_SCRIPTS/get_upddte.pl -f $EMBS_DAILY_DIR/$filenm
$AGENCY_SCRIPTS/fnma_daily_factors.sas -sysparm "$facdat $upddte"
$AGENCY_SCRIPTS/fnma_daily_addtn.sas -sysparm "$facdat $upddte"
$SPDR_SHARED_SCRIPTS/mdb_facdat.pl -s $sectyp -r Y
sed '
s/.*\($AGENCY_SCRIPTS\)\>/\1/
t
s/.*\($SPDR_SHARED_SCRIPTS)\>/\1/
'
sed -e 's/.*\($AGENCY_SCRIPTS\)/\1/' -e 's/.*\($SPDR_SHARED_SCRIPTS\)/\1/'
The t saves/prevents looking for B if you find A. While this list is trivial, longer lists can be created with the most likely at the top to save processing, when you do many possible transforms.
ctsgnb
October 26, 2010, 12:53pm
5
sed 's/.*\($[AS][GP].*\)/\1/'
[ctsgnb@shell ~]$ cat ramk
facdat=$SPDR_SHARED_SCRIPTS/mdb_facdat.pl -s fnma;
upddte=$AGENCY_SCRIPTS/get_upddte.pl -f $EMBS_DAILY_DIR/$filenm
$SASRUN $AGENCY_SCRIPTS/fnma_daily_factors.sas -sysparm "$facdat $upddte"
$SASRUN $AGENCY_SCRIPTS/fnma_daily_addtn.sas -sysparm "$facdat $upddte"
repret=$SPDR_SHARED_SCRIPTS/mdb_facdat.pl -s $sectyp -r Y
[ctsgnb@shell ~]$ sed 's/.*\($[AS][GP].*\)/\1/' ramk
$SPDR_SHARED_SCRIPTS/mdb_facdat.pl -s fnma;
$AGENCY_SCRIPTS/get_upddte.pl -f $EMBS_DAILY_DIR/$filenm
$AGENCY_SCRIPTS/fnma_daily_factors.sas -sysparm "$facdat $upddte"
$AGENCY_SCRIPTS/fnma_daily_addtn.sas -sysparm "$facdat $upddte"
$SPDR_SHARED_SCRIPTS/mdb_facdat.pl -s $sectyp -r Y
[ctsgnb@shell ~]$
#
ctsgnb:
sed 's|^[^$]*||' infile
doesn't match the OP requirements with:
$SASRUN $AGENCY_SCRIPTS/fnma_daily_factors.sas -sysparm "$facdat $upddte"
ctsgnb
October 26, 2010, 3:07pm
7
Oooops, you right, i missed that one ...
sed 's/.*\($[AS][GP].*\)/\1/' input
Might add '[ED][NR][C_][YS][A-Z_]*_SCRIPT\>' after '[GP]' in case there are near misses!
ctsgnb
October 26, 2010, 3:42pm
9
That was implicit ... i based my statement on the given sample
danmero
October 26, 2010, 3:43pm
10
while IFS='[= ]' read X X;do echo $X;done < file
while read line;do echo ${line#*[= ]};done < file
or
awk -F'[= ]' '{sub($1FS,X)}1' file
---------- Post updated at 03:43 PM ---------- Previous update was at 03:42 PM ----------
@DGPickett [code] tags please!
rdcwayx
October 26, 2010, 8:26pm
11
sed 's/^[^ =]*[ =]//' infile
ctsgnb
October 26, 2010, 8:47pm
13
Lol Scruti, i didn't thought about skipping that first annoying $ this way , Nice ! LoL