Я хочу редактировать исходные файлы с помощью 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.
Есть идеи, как редактировать диапазоны файлов с помощью их символических ссылок из командной строки? Что мне не хватает?
Один из способов - заменить содержимое @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
$