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.
1 Like
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