How to prevent from destroying symlinks, using Perl when to replace with sed regex?
Clash Royale CLAN TAG#URR8PPP
Based on How do I prevent sed -i from destroying symlinks?, but I use Perl.
I tried by middle of all these questions:
- Is there a way to make perl -i not clobber symlinks?
- perl symlink on gz file
- How do I prevent sed from destroying hardinks?
It was unsucessfull. Here is the little and simple sample:
#!/bin/perl
use strict; use warnings;
while (<>)
## For all lines, replace all occurrences of #5c616c with another colour
s/#5c616c/#8bbac9/g $(readlink -e -- "<>")
## $(readlink -e -- "<>") is similar to --in-place --follow-symlinks
## Print the line
print;
sed perl symlink replace
add a comment |
Based on How do I prevent sed -i from destroying symlinks?, but I use Perl.
I tried by middle of all these questions:
- Is there a way to make perl -i not clobber symlinks?
- perl symlink on gz file
- How do I prevent sed from destroying hardinks?
It was unsucessfull. Here is the little and simple sample:
#!/bin/perl
use strict; use warnings;
while (<>)
## For all lines, replace all occurrences of #5c616c with another colour
s/#5c616c/#8bbac9/g $(readlink -e -- "<>")
## $(readlink -e -- "<>") is similar to --in-place --follow-symlinks
## Print the line
print;
sed perl symlink replace
The first link solution you point out is particularly interesting for not having to complicate code.
– Rui F Ribeiro
Jan 6 at 22:21
The codes in Shell are easy than in Perl, but I am not sure it is possible to make something similar in Shell to that in Perl. See the answer of [terdon](@terdon): unix.stackexchange.com/a/492724/232293
– Gustavo Reis
Jan 6 at 22:28
add a comment |
Based on How do I prevent sed -i from destroying symlinks?, but I use Perl.
I tried by middle of all these questions:
- Is there a way to make perl -i not clobber symlinks?
- perl symlink on gz file
- How do I prevent sed from destroying hardinks?
It was unsucessfull. Here is the little and simple sample:
#!/bin/perl
use strict; use warnings;
while (<>)
## For all lines, replace all occurrences of #5c616c with another colour
s/#5c616c/#8bbac9/g $(readlink -e -- "<>")
## $(readlink -e -- "<>") is similar to --in-place --follow-symlinks
## Print the line
print;
sed perl symlink replace
Based on How do I prevent sed -i from destroying symlinks?, but I use Perl.
I tried by middle of all these questions:
- Is there a way to make perl -i not clobber symlinks?
- perl symlink on gz file
- How do I prevent sed from destroying hardinks?
It was unsucessfull. Here is the little and simple sample:
#!/bin/perl
use strict; use warnings;
while (<>)
## For all lines, replace all occurrences of #5c616c with another colour
s/#5c616c/#8bbac9/g $(readlink -e -- "<>")
## $(readlink -e -- "<>") is similar to --in-place --follow-symlinks
## Print the line
print;
sed perl symlink replace
sed perl symlink replace
asked Jan 6 at 21:24
Gustavo ReisGustavo Reis
154
154
The first link solution you point out is particularly interesting for not having to complicate code.
– Rui F Ribeiro
Jan 6 at 22:21
The codes in Shell are easy than in Perl, but I am not sure it is possible to make something similar in Shell to that in Perl. See the answer of [terdon](@terdon): unix.stackexchange.com/a/492724/232293
– Gustavo Reis
Jan 6 at 22:28
add a comment |
The first link solution you point out is particularly interesting for not having to complicate code.
– Rui F Ribeiro
Jan 6 at 22:21
The codes in Shell are easy than in Perl, but I am not sure it is possible to make something similar in Shell to that in Perl. See the answer of [terdon](@terdon): unix.stackexchange.com/a/492724/232293
– Gustavo Reis
Jan 6 at 22:28
The first link solution you point out is particularly interesting for not having to complicate code.
– Rui F Ribeiro
Jan 6 at 22:21
The first link solution you point out is particularly interesting for not having to complicate code.
– Rui F Ribeiro
Jan 6 at 22:21
The codes in Shell are easy than in Perl, but I am not sure it is possible to make something similar in Shell to that in Perl. See the answer of [terdon](@terdon): unix.stackexchange.com/a/492724/232293
– Gustavo Reis
Jan 6 at 22:28
The codes in Shell are easy than in Perl, but I am not sure it is possible to make something similar in Shell to that in Perl. See the answer of [terdon](@terdon): unix.stackexchange.com/a/492724/232293
– Gustavo Reis
Jan 6 at 22:28
add a comment |
1 Answer
1
active
oldest
votes
The readlink -e
command is not portable so should not be relied upon.
$ cat input
Like quills upon the fretful porpentine.
$ ln -s input alink
$ readlink -e alink
readlink: illegal option -- e
usage: readlink [-n] [file ...]
Within the Perl code, instead replace the links with the filename it points to using Perl's readlink
function then loop over the input as usual.
$ perl -i -ple 'BEGINfor(@ARGV) $_=readlink if -l tr/A-Z/a-z/' alink
alink
is still a symbolic link and the contents of input
have been modified:
$ perl -E 'say readlink "alink"'
input
$ cat input
LIKE QUILLS UPON THE FRETFUL PORPENTINE.
Within a Perl script this might look something like
#!/usr/bin/env perl
use strict;
use warnings;
for my $arg (@ARGV)
$arg = readlink $arg if -l $arg;
# in-place edit with backup filename, perldoc -v '$^I'
$^I = ".whoops";
while (readline)
s/#5c616c/#8bbac9/g;
print;
though may need List::Util::uniq
or similar to avoid modifying the same filename two or more times, if the input contains duplicate filenames.
What if<>
is necessary? See the first codes lines of [terdon](@terdon): unix.stackexchange.com/a/492724/232293.
– Gustavo Reis
Jan 6 at 22:09
<>
is a less readable way to sayreadline
. compareperl -MO=Deparse,-p -e '<>;readline'
– thrig
Jan 6 at 23:16
Hi, I have tested it, it almost worked - it preserved the symlinks, but it made all unusual. You can download the small archive file: transfernow.net/f07ahfb8joa4 and test by yourself.
– Gustavo Reis
Jan 7 at 1:29
add a comment |
Your Answer
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "106"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f492886%2fhow-to-prevent-from-destroying-symlinks-using-perl-when-to-replace-with-sed-reg%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
The readlink -e
command is not portable so should not be relied upon.
$ cat input
Like quills upon the fretful porpentine.
$ ln -s input alink
$ readlink -e alink
readlink: illegal option -- e
usage: readlink [-n] [file ...]
Within the Perl code, instead replace the links with the filename it points to using Perl's readlink
function then loop over the input as usual.
$ perl -i -ple 'BEGINfor(@ARGV) $_=readlink if -l tr/A-Z/a-z/' alink
alink
is still a symbolic link and the contents of input
have been modified:
$ perl -E 'say readlink "alink"'
input
$ cat input
LIKE QUILLS UPON THE FRETFUL PORPENTINE.
Within a Perl script this might look something like
#!/usr/bin/env perl
use strict;
use warnings;
for my $arg (@ARGV)
$arg = readlink $arg if -l $arg;
# in-place edit with backup filename, perldoc -v '$^I'
$^I = ".whoops";
while (readline)
s/#5c616c/#8bbac9/g;
print;
though may need List::Util::uniq
or similar to avoid modifying the same filename two or more times, if the input contains duplicate filenames.
What if<>
is necessary? See the first codes lines of [terdon](@terdon): unix.stackexchange.com/a/492724/232293.
– Gustavo Reis
Jan 6 at 22:09
<>
is a less readable way to sayreadline
. compareperl -MO=Deparse,-p -e '<>;readline'
– thrig
Jan 6 at 23:16
Hi, I have tested it, it almost worked - it preserved the symlinks, but it made all unusual. You can download the small archive file: transfernow.net/f07ahfb8joa4 and test by yourself.
– Gustavo Reis
Jan 7 at 1:29
add a comment |
The readlink -e
command is not portable so should not be relied upon.
$ cat input
Like quills upon the fretful porpentine.
$ ln -s input alink
$ readlink -e alink
readlink: illegal option -- e
usage: readlink [-n] [file ...]
Within the Perl code, instead replace the links with the filename it points to using Perl's readlink
function then loop over the input as usual.
$ perl -i -ple 'BEGINfor(@ARGV) $_=readlink if -l tr/A-Z/a-z/' alink
alink
is still a symbolic link and the contents of input
have been modified:
$ perl -E 'say readlink "alink"'
input
$ cat input
LIKE QUILLS UPON THE FRETFUL PORPENTINE.
Within a Perl script this might look something like
#!/usr/bin/env perl
use strict;
use warnings;
for my $arg (@ARGV)
$arg = readlink $arg if -l $arg;
# in-place edit with backup filename, perldoc -v '$^I'
$^I = ".whoops";
while (readline)
s/#5c616c/#8bbac9/g;
print;
though may need List::Util::uniq
or similar to avoid modifying the same filename two or more times, if the input contains duplicate filenames.
What if<>
is necessary? See the first codes lines of [terdon](@terdon): unix.stackexchange.com/a/492724/232293.
– Gustavo Reis
Jan 6 at 22:09
<>
is a less readable way to sayreadline
. compareperl -MO=Deparse,-p -e '<>;readline'
– thrig
Jan 6 at 23:16
Hi, I have tested it, it almost worked - it preserved the symlinks, but it made all unusual. You can download the small archive file: transfernow.net/f07ahfb8joa4 and test by yourself.
– Gustavo Reis
Jan 7 at 1:29
add a comment |
The readlink -e
command is not portable so should not be relied upon.
$ cat input
Like quills upon the fretful porpentine.
$ ln -s input alink
$ readlink -e alink
readlink: illegal option -- e
usage: readlink [-n] [file ...]
Within the Perl code, instead replace the links with the filename it points to using Perl's readlink
function then loop over the input as usual.
$ perl -i -ple 'BEGINfor(@ARGV) $_=readlink if -l tr/A-Z/a-z/' alink
alink
is still a symbolic link and the contents of input
have been modified:
$ perl -E 'say readlink "alink"'
input
$ cat input
LIKE QUILLS UPON THE FRETFUL PORPENTINE.
Within a Perl script this might look something like
#!/usr/bin/env perl
use strict;
use warnings;
for my $arg (@ARGV)
$arg = readlink $arg if -l $arg;
# in-place edit with backup filename, perldoc -v '$^I'
$^I = ".whoops";
while (readline)
s/#5c616c/#8bbac9/g;
print;
though may need List::Util::uniq
or similar to avoid modifying the same filename two or more times, if the input contains duplicate filenames.
The readlink -e
command is not portable so should not be relied upon.
$ cat input
Like quills upon the fretful porpentine.
$ ln -s input alink
$ readlink -e alink
readlink: illegal option -- e
usage: readlink [-n] [file ...]
Within the Perl code, instead replace the links with the filename it points to using Perl's readlink
function then loop over the input as usual.
$ perl -i -ple 'BEGINfor(@ARGV) $_=readlink if -l tr/A-Z/a-z/' alink
alink
is still a symbolic link and the contents of input
have been modified:
$ perl -E 'say readlink "alink"'
input
$ cat input
LIKE QUILLS UPON THE FRETFUL PORPENTINE.
Within a Perl script this might look something like
#!/usr/bin/env perl
use strict;
use warnings;
for my $arg (@ARGV)
$arg = readlink $arg if -l $arg;
# in-place edit with backup filename, perldoc -v '$^I'
$^I = ".whoops";
while (readline)
s/#5c616c/#8bbac9/g;
print;
though may need List::Util::uniq
or similar to avoid modifying the same filename two or more times, if the input contains duplicate filenames.
answered Jan 6 at 21:57
thrigthrig
24.5k23056
24.5k23056
What if<>
is necessary? See the first codes lines of [terdon](@terdon): unix.stackexchange.com/a/492724/232293.
– Gustavo Reis
Jan 6 at 22:09
<>
is a less readable way to sayreadline
. compareperl -MO=Deparse,-p -e '<>;readline'
– thrig
Jan 6 at 23:16
Hi, I have tested it, it almost worked - it preserved the symlinks, but it made all unusual. You can download the small archive file: transfernow.net/f07ahfb8joa4 and test by yourself.
– Gustavo Reis
Jan 7 at 1:29
add a comment |
What if<>
is necessary? See the first codes lines of [terdon](@terdon): unix.stackexchange.com/a/492724/232293.
– Gustavo Reis
Jan 6 at 22:09
<>
is a less readable way to sayreadline
. compareperl -MO=Deparse,-p -e '<>;readline'
– thrig
Jan 6 at 23:16
Hi, I have tested it, it almost worked - it preserved the symlinks, but it made all unusual. You can download the small archive file: transfernow.net/f07ahfb8joa4 and test by yourself.
– Gustavo Reis
Jan 7 at 1:29
What if
<>
is necessary? See the first codes lines of [terdon](@terdon): unix.stackexchange.com/a/492724/232293.– Gustavo Reis
Jan 6 at 22:09
What if
<>
is necessary? See the first codes lines of [terdon](@terdon): unix.stackexchange.com/a/492724/232293.– Gustavo Reis
Jan 6 at 22:09
<>
is a less readable way to say readline
. compare perl -MO=Deparse,-p -e '<>;readline'
– thrig
Jan 6 at 23:16
<>
is a less readable way to say readline
. compare perl -MO=Deparse,-p -e '<>;readline'
– thrig
Jan 6 at 23:16
Hi, I have tested it, it almost worked - it preserved the symlinks, but it made all unusual. You can download the small archive file: transfernow.net/f07ahfb8joa4 and test by yourself.
– Gustavo Reis
Jan 7 at 1:29
Hi, I have tested it, it almost worked - it preserved the symlinks, but it made all unusual. You can download the small archive file: transfernow.net/f07ahfb8joa4 and test by yourself.
– Gustavo Reis
Jan 7 at 1:29
add a comment |
Thanks for contributing an answer to Unix & Linux Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f492886%2fhow-to-prevent-from-destroying-symlinks-using-perl-when-to-replace-with-sed-reg%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
The first link solution you point out is particularly interesting for not having to complicate code.
– Rui F Ribeiro
Jan 6 at 22:21
The codes in Shell are easy than in Perl, but I am not sure it is possible to make something similar in Shell to that in Perl. See the answer of [terdon](@terdon): unix.stackexchange.com/a/492724/232293
– Gustavo Reis
Jan 6 at 22:28