Say you have the following inputs:
$ for i in a b c ; do echo "$i is $i" > $i; done
$ cat a b c
a is a
b is b
c is c
Everybody knows capital letters are much better!
perl -i.bak -pe '$_ = uc' a b c
So now
$ cat a b c
A IS A
B IS B
C IS C
But we'd really like to can this in a command called upcase
, and that's easy to do!
#! /usr/bin/perl -pi.bak
$_ = uc
See it at work:
$ for i in a b c ; do echo "$i is $i" > $i; done
$ cat a b c
a is a
b is b
c is c
$ ./upcase a b c
$ !cat
cat a b c
A IS A
B IS B
C IS C
More tips from an answer to a similar question:
The -e
option introduces Perl code to be executed—which you might think of as a script on the command line—so drop it and stick the code in the body. Leave -p
in the shebang (#!
) line.
In general, it's safest to stick to at most one "clump" of options in the shebang line. If you need more, you could always throw their equivalents inside a BEGIN {}
block.
Don't forget to turn on the execute bit!
chmod +x script-name
Because you didn't give the actual one-liner you want to convert, I had to give a broad, general answer. If you edit your question to make it specific to what you want to do, we can give more helpful answers.