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.

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