How To Delete Lines Using PERL Edit In Place
erics, March 23rd, 2020 Using PERL, we can easily do a search and replace across multiple files. perl -ni -w -e ‘print unless m/^gdb\d+/;’ yourFileSpec
|
erics, March 23rd, 2020 Using PERL, we can easily do a search and replace across multiple files. perl -ni -w -e ‘print unless m/^gdb\d+/;’ yourFileSpec
erics, December 11th, 2019 When using Perl’s exec() call, the best way to invoke it is as follows:
|
1 |
exec("$dir/myprog.sh",@ARGV); |
This syntax does some important things: – passes a scalar value as the first argument which exec interprets as PROGRAM – passes an array as the second argument which exec will use as the arguments to pass into PROGRAM Note […]
erics, October 9th, 2019 Use Case: Export Apple Reminders from MacOS application to cleaned plain text, i.e. remove unwanted spaces, blank lines and square brackets PROCEDURE Click on a single item in the MacOS Reminders app list Select All (either Command-a or use Edit->Select All) Copy (either Command-c or use Edit->Copy) Open Terminal Run cleanme Paste the copied reminders […]
erics, August 4th, 2019 I wanted to call a sub-routine based on a variable in Perl, like this:
|
1 2 |
our $role = 'master'; &$role; |
but it failed because of use strict:
|
1 |
Can't use string ("master") as a subroutine ref while "strict refs" in use at /opt/continuent/tungsten/tools/tungsten_find_orphaned line 213. |
To enable using a variable as a reference, simply specify that to Perl:
|
1 2 |
use strict no strict "refs"; |
erics, June 12th, 2019 The Problem Tried to install the latest version of cpan and got stuck. Tracked it down to the dependency module Mac::SystemDirectory which was failing to build:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
cpan[1]> install Mac::SystemDirectory Reading '/var/root/.cpan/Metadata' Database was generated on Sun, 09 Jun 2019 07:17:02 GMT Running install for module 'Mac::SystemDirectory' Running make for E/ET/ETHER/Mac-SystemDirectory-0.10.tar.gz Checksum for /var/root/.cpan/sources/authors/id/E/ET/ETHER/Mac-SystemDirectory-0.10.tar.gz ok Scanning cache /var/root/.cpan/build for sizes ............................................................................DONE CPAN.pm: Building E/ET/ETHER/Mac-SystemDirectory-0.10.tar.gz HASCOMPILEREZFt/TESTUSSI.c:2:10: fatal error: 'EXTERN.h' file not found #include "EXTERN.h" ^~~~~~~~~~ 1 error generated. Couldn't execute cc -g -pipe -fno-common -DPERL_DARWIN -fno-strict-aliasing -fstack-protector -Os "-I/System/Library/Perl/5.18/darwin-thread-multi-2level/CORE" -c HASCOMPILEREZFt/TESTUSSI.c -o HASCOMPILEREZFt/TESTUSSI.o: Inappropriate ioctl for device at Makefile.PL line 14. Requires a compiler Warning: No success on command[/usr/bin/perl Makefile.PL INC=-I/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Perl/5.18/darwin-thread-multi-2level/CORE] ETHER/Mac-SystemDirectory-0.10.tar.gz /usr/bin/perl Makefile.PL INC=-I/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Perl/5.18/darwin-thread-multi-2level/CORE -- NOT OK Running make test Make had some problems, won't test Running make install Make had some problems, won't install Failed during this command: ETHER/Mac-SystemDirectory-0.10.tar.gz : writemakefile NO '/usr/bin/perl Makefile.PL INC=-I/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Perl/5.18/darwin-thread-multi-2level/CORE' returned status 6400 |
The Solution Use the MacOS installer command to deploy the needed files:
|
1 2 3 4 5 |
xcode-select --install sudo installer -pkg /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg -target / installer: Package name is macOS_SDK_headers_for_macOS_10.14 installer: Installing at base path / installer: The install was successful. |
The, rerunning the cpan install works:
|
1 2 3 4 5 6 7 8 9 10 11 |
cpan[1]> install Mac::SystemDirectory ... Running make install Files found in blib/arch: installing files in blib/lib into architecture dependent library tree Installing /Library/Perl/5.18/darwin-thread-multi-2level/auto/Mac/SystemDirectory/SystemDirectory.bs Installing /Library/Perl/5.18/darwin-thread-multi-2level/auto/Mac/SystemDirectory/SystemDirectory.bundle Installing /Library/Perl/5.18/darwin-thread-multi-2level/Mac/SystemDirectory.pm Installing /usr/local/share/man/man3/Mac::SystemDirectory.3pm Appending installation info to /Library/Perl/Updates/5.18.2/darwin-thread-multi-2level/perllocal.pod ETHER/Mac-SystemDirectory-0.10.tar.gz /usr/bin/make install -- OK |
erics, May 31st, 2019 I have a task in Perl to list specific files based on pattern match, those with and those without the string “_from_”. There are two files in the directory to filter: static-east.properties static-east_from_west.properties To capture the files with the _from_ string was easy:
|
1 |
/^static-(.*?)_from_(.*?)\.properties$/ |
To capture the files WITHOUT the _from_ string was not quite […]
erics, January 11th, 2019 UPDATE 07-March-2025 Please visit: How To Prettify Using Vim and Prettier In the normal vim mode, typing gg=G will reindent the entire file. == will re-indent just the current line. http://vim.wikia.com/wiki/Fix_indentation
erics, September 18th, 2017 |
1 2 3 4 |
my $created_at = '2017-09-18T13:43:40Z'; my $marker = DateCalc('today','30 days ago'); my $cmp = Date_Cmp($created_at,$marker); if ($cmp < 0) { print "Older than marker!\n"; } else { print "Same date or later than marker\n"; } |
erics, September 5th, 2017 Step 1: Enable Apache status and lock it down: Make sure mod_status is being loaded:
|
1 2 3 |
shell> grep -Rn mod_status /etc/httpd/* /etc/httpd/conf.modules.d/00-base.conf:58:LoadModule status_module modules/mod_status.so |
Add support for the call just under the first DocumentRoot statement:
|
1 2 3 4 5 6 7 8 |
shell> vim /etc/httpd/conf/httpd.conf <Location /server-status> SetHandler server-status Require ip 127.0.0.1 Require ip ::1 Require ip {Your_IP_Here} </Location> |
Step 2. Prepare your environment:
|
1 |
shell> cpan YAML HTML::TableExtract |
Step 3: Create and run the status script: (See the astat contents at the bottom)
|
1 2 3 4 5 6 7 8 9 |
shell> vim /root/astat shell> chmod 755 /root/astat shell> vi ~/.bashrc ADD: alias ipw='while true; do sleep 5; /root/astat; done' shell> ipw 1.2.3.4|yourdomain.com:443|POST /wp-cron.php?doing_wp_cron=1563901063.57946491241455078125| |
/root/astat
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
#!/usr/bin/perl use strict; use HTML::TableExtract; # PATH to "curl" utility my $CURL = "/usr/bin/curl"; # URL of the server-status we want to process my $STATUS_URL = "http://localhost/server-status"; # those are the headers in the first row of the table we want to extract # Used by HTML::TableExtract to search for our table, within the whole HTML output my $headers =['Srv','PID','Acc','M','CPU','SS','Req','Conn','Child','Slot','Client','VHost','Request']; # Let's fetch the status page... my $output = `$CURL -s $STATUS_URL`; # Let's search for our table within the HTML... my $tables = HTML::TableExtract->new( headers => $headers ); # We found it (hopefully), so let's parse it... $tables->parse($output); # ...and let's stick to the first one my $status_table = $tables->first_table_found; # Now let's loop allover the rows... foreach my $row_ref ($status_table->rows) { # Let's de-reference the ARRAY reference, so to better manager # the various elements... my @row = @$row_ref; # Let's check for IP next if $row[10]=~/127.0.0.1/; next if $row[10]=~/216.66.125.161/; next if $row[10]=~/69.162.124.235/; # Let's check for an OPTIONS row... if ($row[12]=~/OPTIONS/) { # simply skip to next row in the loop next; } # Let's choose whatever columns we want (first column has index "0") # So here we have Srv, PID, Client and Request #foreach my $column (0,1,10,12) { foreach my $column (10,11,12) { print $row[$column]."|"; } print "\n"; } |
erics, October 16th, 2014 Using PERL, we can easily do a search and replace across multiple files. perl -pi -w -e ‘s/SEARCH_FOR/REPLACE_WITH/g;’ FILE_LIST The following example will replace all occurrences of “hello” with “goodbye” inside files ending with .txt:
|
1 |
perl -pi -w -e 's/hello/goodbye/g;' *.txt |
To handle special characters, use the hex value. For example, to convert MS web files that use control characters: […]