in reply to seeking oneliner improvement

Hard to test locally, but this should be (roughly) equivalent

perl -s -e"BEGIN{@ARGV=glob@ARGV}" -nle"/\[$TAG\]/../\[\/$TAG\]/&& print qq[$ARGV($.):$_]" -TAG=tath_tag ./*/dir/*.ext

With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.

Replies are listed 'Best First'.
Re^2: seeking oneliner improvement
by jwkrahn (Abbot) on Nov 25, 2011 at 21:03 UTC

    Probably better as:

    perl -sne " BEGIN { @ARGV = map glob( $_ ), @ARGV } /\[$TAG\]/ ... /\[ +\/$TAG\]/ && print qq[$ARGV($.):$_]; close ARGV if eof " -- -TAG=ta +th_tag ./*/dir/*.ext

    1. glob works on strings, not arrays.
    2. If /\[$TAG\]/ and /\[\/$TAG\]/ are on the same line then .. will not work correctly.
    3. To get the correct line number for each file you need to close the filehandle at eof.
    4. And, without the -- switch the perl interpreter will try to parse -TAG as a valid perl option.

Re^2: seeking oneliner improvement
by Discipulus (Canon) on Nov 25, 2011 at 16:04 UTC

    thanks. if you replace
    /\[$ARGV[0]\]/ .. /\[\/$ARGV[0]\]/
    whith
    /\<$ARGV[0]\>/ .. /\<\/$ARGV[0]\>/
    and you glob a path with some html file it must search for some html tag you specifies.
    Really I don't understand your reply, sure for my ignorance: i go to study the -s operator
    thanks L*
    there are no rules, there are no thumbs..
      Really I don't understand your reply, sure for my ignorance: i go to study the -s operator

      See perlrun for -s. It cause perl to parse command line arguments of the form: -XYZ=pqr which causes the variable $xyz to have the value "pqr" within the program or one-liner.

      ## run perl; enable arg parsing perl -s ## expand filename globs -e"BEGIN{@ARGV=glob@ARGV}" ## if between the tags, print filename(linenumber):line -nle"/\[$TAG\]/../\[\/$TAG\]/&& print qq[$ARGV($.):$_]" ## Supply the tagname to search for; and the fileglob -TAG=tath_tag ./*/dir/*.ext

      (Obviously, you'll need to put that all on one line to run it.)


      With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
      Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
      "Science is about questioning the status quo. Questioning authority".
      In the absence of evidence, opinion is indistinguishable from prejudice.