sed は一致の前後に文字列を置き換えます。

sed は一致の前後に文字列を置き換えます。

いくつかの行(デフォルトではMySQLクエリ)を含むファイルがあります。

たとえば、

GRANT ALL PRIVILEGES ON *.* TO 'user1'@'%' IDENTIFIED BY PASSWORD '*A576A2D299CFAF43CE15363F20BDD260FC1E9F77' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'user2'@'%' IDENTIFIED BY PASSWORD '*CE15363F20BA576F43DD260FC1E9F77A2D299CFA';

IDENTIFIEDとで始まるすべての文字を削除したいと思います。2番目の一重引用符の前に

予想出力:

GRANT ALL PRIVILEGES ON *.* TO 'user1'@'%' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'user2'@'%';

AWKまたはSEDコマンドはありますか?

ベストアンサー1

要求された内容(IDENTIFIEDで始まり、2番目の一重引用符の前のすべての文字を削除):

$ sed "s/IDENTIFIED[^']*'[^']*//" file
GRANT ALL PRIVILEGES ON *.* TO 'user1'@'%' ' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'user2'@'%' ';

実際に期待した結果が生成されます。

$ sed "s/ *IDENTIFIED.*'//" file
GRANT ALL PRIVILEGES ON *.* TO 'user1'@'%' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'user2'@'%';

おすすめ記事