我想用perl编辑原始文件,当我有一个数字序列的别名。
任务是在命令行上使用perl,例如
perl -pe 's/apples/oranges/'
但是要编辑文件:
perl -i.bak
-i选项不适用于符号链接
ln -s fs fruitSalad
用-i ,perl将会重写一个新的文件,replace(破坏)前面的符号链接。 即它不会编辑原文。
有一个解决方法( 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。
任何想法如何通过命令行中的符号链接编辑文件的范围? 我错过了什么?
一种方法是在循环文件内容之前用链接的目标replace@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 $