特定のsed
行を実行するたびに、その番号を1ずつ増やして、文字列の最後の番号を変更したいと思います。
文字列は次のようになります。
server-port=25555
このsed
行のようなものを実行して実行できると思っていましたが、機能しません。
sed -i 's/port=[0-9]{5}/int(&+1)/'
このタスクには、Perl
ではなくsed
をお勧めします。
Perl -i -pe 's/(port=)(\d+)$/$1.($2+1)/e' filename
マルチライナーを気にしない場合は、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式を引用符で囲まずに残すことができます。
echo "server-port=25555" | sed -E 's/(.*-port=)([0-9]+)/echo "\1$((\2+1))"/e'