замените строку переменной в файле с помощью сценария удара

через сценарий удара я пытаюсь найти число значения - из текста в файле, затем заставить новую переменную затем заменить его строкой в том файле, например. в файле в /root/test.txt у меня есть строка web1, я должен сократить номер "1" и увеличить его на 1, таким образом, это будет 2 затем замена web1 web2, именно это я сделал до сих пор какую-либо идею, как сделать его работами?

#!/bin/bash
m=grep 'web' /root/test.txt | awk '{print $2}'
i= $m | cut -c3
i=i+1
n='web$i'
$ sed -i 's/$m/$n/g' /root/test.txt

Демонстрационный вход:

 project web0

Демонстрационный вывод:

 project web1
3
задан 13 February 2016 в 19:33

3 ответа

AWK может искать и заменить текст также, таким образом, нет никакой потребности использовать grep или sed. Рев кода извлекает подстроку из второго столбца (webN), увеличивает N и заменяет вторым полем с webN+1

$ cat testInput.txt                                                                                          
project web0
other
project web1
$ awk '/web/{ num=substr($2,4)+1;$2="web"num };1' testInput.txt                                              
project web1
other
project web2

, Это распечатает отредактированный файл на экране. Можно сохранить это в другой файл как так awk [rest of code here] > fileName.txt и замена, исходная с новым использованием mv fileName.txt oldFile.txt

3
ответ дан 1 December 2019 в 13:24

Спасибо парни, я попробовал этот код, и это хорошо работало для меня,

#!/bin/bash
DPATH="/root/test.txt"
k=$(grep 'web' $DPATH | awk '{print $2}')      # web ends by a number#
i=$(grep 'web' $DPATH | awk '{print $2}'| cut -c3)
m=$((i+1))
n="web$m"
sed -i -e 's/'"$k"'/'"$n"'/g' $DPATH
1
ответ дан 1 December 2019 в 13:24

Использование Perl:

perl -pe 's/\bweb\K[0-9]+\b/$&+1/ge' file

Для редактирования файла на месте добавьте -i опция:

perl -i -pe 's/\bweb\K[0-9]+\b/$&+1/ge' file
  • -p: Perl причин для принятия следующего цикла вокруг программы, которая заставляет его выполнить итерации по аргументам имени файла несколько как sed:

       LINE:
         while (<>) {
             ...             # your program goes here
         } continue {
             print or die "-p destination: $!\n";
         }
    
  • -e: может использоваться для ввода одной строки программы.
  • s/\bweb\K[0-9]+\b/$&+1/ge: соответствия любой web строка, которой предшествует граница слова, отбрасывает соответствие и соответствует одной или нескольким цифрам, сопровождаемым границей слова, заменяя соответствие эквивалентным числом, увеличенным 1.
% cat file
project web0
project web1
project web2
% perl -pe 's/\bweb\K[0-9]+\b/$&+1/ge' file
project web1
project web2
project web3
3
ответ дан 1 December 2019 в 13:24

Другие вопросы по тегам:

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