Forum: Cfengine Help
Subject: Editing only the first line in a file
Author: sauer
Link to topic: https://cfengine.com/forum/read.php?3,21478,21478#msg-21478

Let me know if I'm missing something.  I want to make sure that the first line 
in a file is a certain value - specifically, if the first line is like 
#!.*perl, I want to replace it with #!/path/to/perl -U.  I know that this will 
only be the first line in a file, but some of the files are pretty long.  I'd 
rather not waste a bunch of time comparing every line with a regex (I have a 
lot of files to check, so performance matters).  Right now, I have

body select_region perl_interpreter_line {
  select_start => "#!/\S*perl.*";
  select_end   => "(?!#!).*";
  include_start_delimiter => "true";
  include_end_delimiter   => "false";
}

But that still seems like an awful lot of work (both on my part with typing, 
and on Cfengine's part with extra regex comparisons) when I know that I really 
just want to work on the first line.  It also gripes a lot in files which don't 
have a perl bangpath, which is more of a nuiscance than anything.

I noticed there's a comment in the documentation of both location and 
match_value for "select_line_matching" which says
"This attribute is mutually exclusive of ‘select_line_number’."
but there's no other reference of select_line_number in location - just 
match_value.  So, I thought that perhaps I'd try

body select_region first_line {
  select_line_number => "1";
}


Unfortunately, that segfaults - which I assume means it doesn't work. :)  Are 
there any plans to add a select_line_number (or, even better, a sed-like 
start-line and end-line) capability to the select_region body?  I noticed that 
specifying an end pattern without a start pattern also segfaults, which I had 
hoped might select from the beginning of the file to the delimiter.  Any better 
suggestions?

Thanks,
Danny

_______________________________________________
Help-cfengine mailing list
Help-cfengine@cfengine.org
https://cfengine.org/mailman/listinfo/help-cfengine

Reply via email to