何かを変更したい行を含むファイルがあります。
database.url=jdbc:mysql://my.sql.ip.address:mySqlPort/mySqlDbName?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
IPアドレスを変更したいとしましょう。次のsed
コマンドを使用しました。
sed -i -r 's/(database.url=jdbc:mysql:\/\/).+(:.+)/\1zizi/' myFile
この出力は次のようになります。
database.url=jdbc:mysql://zizi
しかし、私は欲しい:
database.url=jdbc:mysql://zizi:mySqlPort/mySqlDbName?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
私のものはどのように書くべきですかsed
?これをうまく実行するために使用できる他のコマンドはありますか?
答え1
2番目の次のキャプチャグループを印刷します\2
(あなたのグループを変更したり改善したりしませんsed
)
sed -i -r 's/(database.url=jdbc:mysql:\/\/).+(:.+)/\1zizi\2/' myFile
IPマッチング部分のみを変更する改善された命令です。
sed 's/[1-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/NEWIP/' infile.txt
次の行にのみ適用される場合database.url
:
sed '/^database\.url/ s/[1-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/NEWIP/' infile.txt
またはより有能またはsed
短いです。
sed 's/\([1-9]\)\{1,3\}\(\.[0-9]\{1,3\}\)\{3\}/NEW/'
これは、一致ではなく正確なIPアドレスと一致するように変更および改善することもできます。1.1.1.999
無効なIPで。
答え2
短いsed方法:
sed 's~\(.*mysql://\)[^:]*~\1zizi~' file
出力:
database.url=jdbc:mysql://zizi:mySqlPort/mySqlDbName?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
答え3
sed
どんなトリックも必要としない短い解決策:
$ sed 's#//[^:]*#//zizi#' file
database.url=jdbc:mysql://zizi:mySqlPort/mySqlDbName?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
これにより、挿入したい文字列でその間と直後の//
すべての内容が置き換えられます。: