当我有一个别名的数字序列时,我想用 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
$