複数行のコードを一致させる前にsedを使用してコードを挿入する方法は?

複数行のコードを一致させる前にsedを使用してコードを挿入する方法は?

このコードを追加したい

$cfg['Servers'][$i]['hide_db'] = '^(mysql|information_schema|performance_schema|phpmyadmin)$';

phpMyAdminと入力してください設定ファイル.inc.php文書今後ワイヤー

/**
 * End of servers configuration
予想される結果:
$cfg['Servers'][$i]['hide_db'] = '^(mysql|information_schema|performance_schema|phpmyadmin)$';

/**
 * End of servers configuration
 */

これはサンプルです設定ファイル.inc.php文書(https://github.com/phpmyadmin/phpmyadmin/blob/master/config.sample.inc.php)

私の現在のsedコードはファイルは

#!/bin/sh

PHPMATARGETDIR="/var/www/phpmyadmin"

sudo sed -i "s/\(\/\*\*\)/ #my code before;\n\1/" ${PHPMATARGETDIR}/config.inc.php

しかし、うまくいきません。開いているすべてのコメントブロックの前にのみ追加されます。

このコードを使用すると、まったく機能しません。

sudo sed -i "s/\(\/\*\*\n\s*\* End of servers configuration\)/ #my code before;\n\1/" ${PHPMATARGETDIR}/config.inc.php

ベストアンサー1

sedでこれを行うことができます。

sed "/\/\*\*/{
N
/ \* End of servers config/i\
\$cfg['Servers'][\$i]['hide_db'] = '^(mysql|information_schema|performance_schema|phpmyadmin)\$';
}" config.inc.php

あなたが提供するものには、config.inc.php実際には以下が含まれています。

/*
 * End of servers configuration
 */

いいえ二重アスタリスク -/\/\*/単に最初の式と2番目の式を作成する方が安全です。/End of servers config/

おすすめ記事