home  bbs  files  messages ]

      ZZLI4427             linux.debian.maint.boot             505 messages      

[ previous | next | reply ]

[ list messages | list forums ]

  Msg # 188 of 505 on ZZLI4427, Wednesday 10-07-25, 1:39  
  From: PHILIP HANDS  
  To: CYRIL BRULEBOIS  
  Subj: Bug#1116709: hw-detect: list_deb_firmwar  
 XPost: linux.debian.bugs.dist 
 From: phil@hands.com 
  
 Cyril Brulebois  writes: 
  
 > [ Re-adding submitter€€€ ] 
 > 
 > Philip Hands  (2025-09-30): 
 >> alexander barakin  writes: 
 >> 
 >> >  list_deb_firmware () { 
 >> >   udpkg -c "$1" \\ 
 >> > -  | grep '^\\./lib/firmware/' \\ 
 >> > -  | sed -e 's!^\\./lib/firmware/!!' \\ 
 >> > +  | grep '^\\.\\(/usr\\)\\?/lib/firmware/' \\ 
 >> > +  | sed -e 's!^\\.\\(/usr\\)\\?/lib/firmware/!!' \\ 
 >> >    | grep -v '^$' 
 >> >  } 
 >> 
 >> Here's a variation on that which avoids the `grep | sed | grep` pipe, 
 >> and takes advantage of the fact that we have support for -E in d-i. 
 >> 
 >>   https://salsa.debian.org/installer-team/hw-detect/-/merge_requests/14 
 > 
 > If we go for that, maybe include some comments to explain what that's 
 > doing, so that non-sed experts can grok what's happening? 
  
 Looking at this particular example: 
  
  udpkg -c "$1" | sed -nE 's!^\\.(/usr)?/lib/firmware/(.)!\\2!p' 
  
 The things that make that work are: 
  
   `-n` option and the 'p' flag at the end of the pattern: 
  
      The `-n` tells sed to suppress its output, which we do in order to 
      not need the initial grep that was selecting just the line we're 
      interested in. The sed replacement pattern then selects that line, 
      and does a replacement, and the `p` means: 
  
        If the pattern matched, print the resulting pattern space 
        (so what's on the line after the substitution). 
  
   `-E` means "Use extended regular expressions" which is why I can get 
        away without backslash-escaping the parentheses. 
  
   `\\2` this is whatever the second match was, which is the single 
        character after the slash that is matched by `(.)`.  The reason 
        for that is to make sure that the pattern does not match the 
        directory that the `grep -v '^$'` was there to remove, and since 
        it does not match, the line is suppressed by the `-n` and there 
        is no need to have a final grep to get rid of it. 
  
        Since we stop matching at that character, whatever's left on the 
        rest of the line will be untouched, and will therefore be 
        "printed" to STDOUT as a result of the `p` flag. 
  
  
 A very quick grep seems to show that the `sed -e ...p` usage appears 216 
 times in the existing D-I code. The use of a `\\2` is seen 46 times, with 
 `\\1` (so the same concept) used 353 times, while `-E` is obviously a 
 more recent arrival, with only 11 hits. 
  
 I'm sure we don't want to add comments to all of those instances, so 
 perhaps we need a README.sed (or some such) covering the features that 
 actually get used in D-I, and the ways of doing things that do not 
 involve redundant pipelines with repetitive (and thus hard to maintain) 
 parameters. 
  
 If you like, I could start the README as another MR, using the above 
 explanation as an initial draft.  Perhaps that could grow into a more 
 general guide of what works or doesn't in the D-I environment, in which 
 case it needs a better name. 
  
 Cheers, Phil. 
 -- 
 Philip Hands -- https://hands.com/~phil 
  
 --- SoupGate-Win32 v1.05 
  * Origin: you cannot sedate... all the things you hate (1:229/2) 

[ list messages | list forums | previous | next | reply ]

search for:

328,117 visits
(c) 1994,  bbs@darkrealms.ca