1

私はたくさんのweb.configファイルを持っており、それぞれに次のようなデータベースへの接続文字列が含まれている可能性があります:-

<add name="MyConnectionString" connectionString="Data Source=myserver;Initial Catalog=mydb;Persist Security Info=False;User ID=myuser;Password=secret" providerName="System.Data.SqlClient" />

私がやりたいUser ID=myuser;Password=secretのは、存在する場合はラインから外れた部分をgrepすることです。

パスワードが接続文字列の最後のプロパティであるとは想定できません。その後に他のプロパティがある可能性があります。したがって、基本的にパスワードは常に"またはで終わります;

cygwinを使用すると、次のようにファイルを検索できます。-

find /cygdrive/c/inetpub/wwwroot/ -iname 'web.config' -printf '%p\0' | xargs -0 grep -i "password="

行全体ではなく、ユーザー名とパスワードのみを取得するようにgrep部分を改善するにはどうすればよいですか?

次に、それをパイプしてsort -u、使用中のユーザー名とパスワードの一意のリストを取得できます。

4

2 に答える 2

2

フラグとともに使用してPerlの正規表現エンジンを使用grepし、フラグを使用して入力の一致する部分のみを返すことができます。-P-o

grep -Po '(User ID|Password)=[^;"]*' web.config

これにより、サンプル入力を考慮して、次の結果が返されます。

User ID=myuser
Password=secret

既存のコマンドを与えると、次のようになります。

find /cygdrive/c/inetpub/wwwroot/ -iname 'web.config' -printf '%p\0' | xargs -0 grep -Poi '(User ID|Password)=[^;"]*'
于 2012-12-03T14:10:42.710 に答える
1

grepとcutを使用すると、パスワードを抽出するためにこれを行うことができます。

grep -o 'Password=[^;"]*' web.config | cut -d= -f2
于 2012-12-03T14:07:27.610 に答える