特定の行が実行されるたびに、その数字を1ずつ増やして文字列の末尾の数字を変更したいと思いますsed
。
文字列は次のとおりです。
server-port=25555
私はそれを行うためにこの行のようなsed
ものを実行できると思いましたが、うまくいきません。
sed -i 's/port=[0-9]{5}/int(&+1)/'
答え1
perl
これを行わないことをお勧めしますsed
。
perl -i -pe 's/(port=)(\d+)$/$1.($2+1)/e' filename
答え2
echo "server-port=25555" | sed -E 's/(.*-port=)([0-9]+)/echo "\1$((\2+1))"/e'
答え3
複数行を使用しても問題ない場合は、sedとShellの数学を使用してこの問題を解決できます。
# or however else you're getting the server-port section
num=$(echo server-port=25555 | sed 's/server-port=//')
v=$((v+1))
sed -i "s/server-port=25555/server-port=$v/" your-file-here
sed式の周りに二重引用符があることに注意してください。これにより、sedが表示する前に$ vを解釈できます。この特別なケースでは、sed式を引用符なしで残すことができます。なぜなら、シェルが(間違って)解釈する他の内容がないからです。