манипулирование файлами: поиск и приращение сценария оболочки - PullRequest
0 голосов
/ 08 февраля 2010
 #something here
 port 4444

 #something here

 port 4444

Итак, у меня есть файл, подобный указанному выше, я бы нашел строку со словом «порт» и увеличил число (число может быть любым числом - необязательно, оно зафиксировано на 4444) рядом с ним на 1.

Например, файл результата должен иметь форму

 #something here
 port 4444

 #something here

 port 4445

Любые мысли, я думаю, что нам нужно использовать sed, но не уверен насчет увеличения его.

EDIT: Извините еще раз, я думал, что получил ответ, основанный на sed, поэтому не думал о позициях. Вот точное содержимое файла

$cat file
data dev-1
type client
option type tcp
option host 99.160.131.163
option nodelay on
option port 6996
end

data dev-2
type client
option type tcp
option host 99.160.131.164
option nodelay on
option port 6996
end

Я хотел бы изменить номер порта и увеличить его. Извините за неудобства.

Ответы [ 4 ]

2 голосов
/ 08 февраля 2010
$ awk 'f && $2=="port"{ $NF=num} $2=="port"{ num=$NF+1; f=1 } 1 ' file
data dev-1
type client
option type tcp
option host 99.160.131.163
option nodelay on
option port 6996
end

data dev-2
type client
option type tcp
option host 99.160.131.164
option nodelay on
option port 6997
end
1 голос
/ 08 февраля 2010

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

awk '
    BEGIN{p=-1}
    { if($2=="port"){if(p==-1){p=$3}else{p++};print $1,$2,p} else {print} }' file
1 голос
/ 08 февраля 2010
port=444
((port+=1))
echo $port

ссылка Конструкция с двойными скобками

0 голосов
/ 08 февраля 2010

Perl скрипт будет:

$ perl -pe 'if (/^(port )(\d+)/) { $_ = "$1" . ($2+$count) . "\n" if $count; $count++; }' < aaa.txt
#something here
port 4444

#something here


port 4445
port 4446

входные данные:

$ cat aaa.txt
#something here
port 4444

#something here


port 4444
port 4444
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...