命令行 perl 不破坏符号链接

命令行 perl 不破坏符号链接

当我有一个别名的数字序列时,我想用 perl 编辑原始文件。

任务是在命令行上使用 perl,例如

 perl -pe 's/apples/oranges/' 

但要就地编辑文件:

 perl -i.bak

-i选项不适用于符号链接

 ln -s fs fruitSalad

使用-i,perl 将重写一个新文件,替换(破坏)先前的符号链接。即,它不会编辑原始文件。

有一个解决方法(https://unix.stackexchange.com/questions/9318/is-there-a-way-to-make-perl-i-not-clobber-symlinks)如下所示:

 perl -i.bak -pe 's/apples/oranges/' $(readlink fs)

这是我的问题. 我想根据一系列符号链接就地编辑原始文件。

 ln -s fs.1 fruitSalad-1
 ln -s fs.2 fruitSalad-2

对于普通文件,perl 将使用范围进行操作,例如

 perl -i.bak -pe 's/apples/oranges/' fs.{1..2}

但这个技巧不起作用$(readlink __)。无法将上述内容结合起来,我更喜欢避免使用 xargs。

知道如何从命令行通过符号链接编辑文件范围吗?我遗漏了什么?

答案1

@ARGV一种方法是,如果该文件是符号链接,则在循环文件内容之前用链接的目标替换(正在操作的文件名)的内容。

$ mkdir blah && cd blah
$ echo aa > orig
$ ln -s orig slink
$ perl -i -pe 'BEGIN{@ARGV=map{$_=readlink if -l}@ARGV}; s/aa/bb/' slink
$ readlink slink
orig
$ cat orig
bb
$ 

相关内容