web-dev-qa-db-ja.com

Sed増分演算

特定のsed行を実行するたびに、その番号を1ずつ増やして、文字列の最後の番号を変更したいと思います。

文字列は次のようになります。

server-port=25555

このsed行のようなものを実行して実行できると思っていましたが、機能しません。

sed -i 's/port=[0-9]{5}/int(&+1)/'
3
Connor Law

このタスクには、Perlではなくsedをお勧めします。

Perl -i -pe 's/(port=)(\d+)$/$1.($2+1)/e' filename
6
Guido

マルチライナーを気にしない場合は、sedとShellmathを使用して次の方法で回避できます。

# 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を見る前に$ vを解釈できるようにするためです。この特定のケースでは、シェルが(誤って)解釈するものが他にないため、sed式を引用符で囲まずに残すことができます。

0
Jeff Schaller
echo "server-port=25555" | sed  -E 's/(.*-port=)([0-9]+)/echo "\1$((\2+1))"/e' 
0
Walter A