regex - How to match a pattern with unrelated charaters/blank-space between two fixed strings? -
i'm trying match string in files begins imports: [ , not contain sharedmodule. can have number or spaces, line-breaks, or other characters (words) in between 2 strings. i've been trying find with:
grep 'imports: \[[.*\s*]*sharedmodule' */*.module.ts   but cannot find files have 'sharedmodule' in it. thought process .* find words , \s find blank space characters, , character class * selector allow show in order.
- can use character classes skip variable number of unrelated lines/characters?
 - how negate statement returns lines without 'sharedmodule'?
 - the goal append 'sharedmodule' import array wherever not exist.
 
thanks! (i'm new , 1 thing i've learned far is: regular expressions hard)
sample match:
imports: [   ionicpagemodule.forchild(formpage),   dynamicformcomponentmodule,   sharedmodule ],   should not match but
imports: [   ionicpagemodule.forchild(leadershippage), ],   should.
grep doesn't process multiline strings default. available gnu grep -z option regex bit more complex.
you may better off using gnu awk solution custom rs (record separator):
awk -v rs='imports:[[:blank:]]*\\[[^]]*\\],[[:space:]]+' 'rt !~ /sharedmodule/{ors=rt} 1' file  imports: [   ionicpagemodule.forchild(leadershippage), ],   where file content this:
cat file imports: [   ionicpagemodule.forchild(formpage),   dynamicformcomponentmodule,   sharedmodule ],  imports: [   ionicpagemodule.forchild(leadershippage), ],      
Comments
Post a Comment