How to replace anything before a pattern?

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.

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 ~]$
#

doesn't match the OP requirements with:

 $SASRUN $AGENCY_SCRIPTS/fnma_daily_factors.sas -sysparm "$facdat $upddte"

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!

That was implicit ... i based my statement on the given sample :slight_smile:

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!

sed 's/^[^ =]*[ =]//' infile
sed 's/^.[^$]*//' infile

Lol Scruti, i didn't thought about skipping that first annoying $ this way , Nice ! LoL :wink: