NAME

prefixcat - Like Unix `cat` but by default prefix each line with filename

VERSION

This document describes version 0.002 of prefixcat (from Perl distribution App-prefixcat), released on 2024-08-11.

SYNOPSIS

% prefixcat [OPTION]... [FILE]...

See examples in "EXAMPLES".

DESCRIPTION

This utility is like the Unix cat command but by default it prefixes each output line with filename. I wrote this utility because this feature is surprisingly absent in cat and rather cumbersome to accomplish using the traditional Unix toolbox. [1] The simplest is using grep '.*' FILE... but it highlights the lines by default.

prefixcat offers a few options. You can choose the string to print to separate the filename prefix and the output line (-s). You can format the filename using a sprintf() template (-f). And for maximum flexibility you can specify a Perl code to do the formatting.

[1] https://serverfault.com/questions/977831/how-to-add-the-filename-as-prefix-to-each-line-of-the-text-file-batch-processi

EXIT CODES

0 on success.

255 on I/O error.

99 on command-line options error.

OPTIONS

  • --separator, -s

    String, default :. The text used to separate the prefix (filename) and the input line.

  • --format, -f

    String, default %s. sprintf() template used to print the prefix (filename).

  • --eval, -e

    If specified, will print the result of Perl code for each line of input. Code will get the content of line (including the newline) in $_. It should return the output line to be printed, or if it returns undef, the content of $_ will be used as the output line.

    Additionally, $main::filename will be set to the current input filename, $main::filenum to the current index of input files (1-based), and $main::linenum to the current input line (1-based).

    Overrides "--separator, -s" and "--format, -f".

FAQ

EXAMPLES

% prefixcat f1.txt f2.txt

Sample output:

f1.txt:line 1
f1.txt:line 2
f1.txt:line 3
f2.txt:line 1
f2.txt:line 2
% prefixcat -e '"$filename:$linenum:$_"' f1.txt f2.txt

Sample output:

f1.txt:1:line 1
f1.txt:2:line 2
f1.txt:3:line 3
f2.txt:1:line 1
f2.txt:2:line 2

Filter lines (skip blank lines)

% prefixcat -e '/\S/ ? "$filename:$linenum:$_" : ""' f1.txt f2.txt

HOMEPAGE

Please visit the project's homepage at https://metacpan.org/release/App-prefixcat.

SOURCE

Source repository is at https://github.com/perlancar/perl-App-prefixcat.

SEE ALSO

cat Unix command

AUTHOR

perlancar <perlancar@cpan.org>

CONTRIBUTING

To contribute, you can send patches by email/via RT, or send pull requests on GitHub.

Most of the time, you don't need to build the distribution yourself. You can simply modify the code, then test via:

% prove -l

If you want to build the distribution (e.g. to try to install it locally on your system), you can install Dist::Zilla, Dist::Zilla::PluginBundle::Author::PERLANCAR, Pod::Weaver::PluginBundle::Author::PERLANCAR, and sometimes one or two other Dist::Zilla- and/or Pod::Weaver plugins. Any additional steps required beyond that are considered a bug and can be reported to me.

COPYRIGHT AND LICENSE

This software is copyright (c) 2024 by perlancar <perlancar@cpan.org>.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.

BUGS

Please report any bugs or feature requests on the bugtracker website https://rt.cpan.org/Public/Dist/Display.html?Name=App-prefixcat

When submitting a bug or request, please include a test-file or a patch to an existing test-file that illustrates the bug or desired feature.