Добавьте порядковый номер в определенную строку для нескольких файлов

Как насчет симлинка, который, конечно, будет работать, только если монтирование активно на конкретной машине:

ln -s /mnt/asteriskstorage /var/spool/asterisk/monitor
0
25.03.2019, 09:33
2 ответа

Пробовал с помощью приведенной ниже команды и работал нормально

for i in 5; do sed -i ''$i'i subject '$i'' file1;j=$(($i+1)); sed -i  ''$i'i subject '$j'' file2;k=$(($j+1)); sed -i ''$i'i subject '$k' ' file3;l=$(($k+1));sed -i ''$i'i subject '$l'' file4;m=$(($l+1)); sed -i ''$i'i subject '$m'' file5;done
0
28.01.2020, 03:53

Я бы использовалperl:

perl -pi -e 's/^Subject: \K/sprintf("%05d ", ++$n)/e' File*

Добавит увеличивающееся число (0, дополненное до ширины 5 )после каждого вхождения Subject:в начале строки.

Только для первого случая:

perl -pi -e '
  unless ($found_already) {
    $found_already = 1 if s/^Subject: \K/sprintf("%05d ", ++$n)/e
  }
  $found_already = 0 if eof' File*

Для добавления Subject: <increasing-number>к строке 5 каждого файла:

perl -pi -e '$_ = sprintf("Subject: %05d %s", ++$n, $_) if $. == 5; 
             close ARGV if eof' File*

Обратите внимание, что файлы передаются perl в порядке, определяемом расширением glob оболочки. В большинстве оболочек это лексический порядок. Если имена файлов пронумерованы без заполнения, это означает, что File10будет стоять перед File2. В оболочке zshвы можете заменить File*на File*(n)для численной сортировки списка или File*(Om)для сортировки по возрасту файла (от самого старого к самому младшему ).

0
28.01.2020, 03:53

Теги

Похожие вопросы