5

入力としてユーザーからパスを取得しようとしています。
ユーザーは、特定のアプリケーションの特定のパスを入力します。

script.sh /var/log/dbhome_1/md5

ディレクトリの数(その場合は-1)を*(アスタリスク)に変換したかったのです。後で、スクリプトはこのパスで何らかのロジックを実行します。

入力で sed を試しているとき、数字に固執しています-

echo "/var/log/dbhome_1/md5" | sed "s/dbhome_*/dbhome_\*/g"

入力は -

/var/log/dbhome_*1/md5

アスタリスクのワイルドカードと文字としていくつかの問題があることを知っています...おそらく正規表現がここで役立ちますか?

4

3 に答える 3

2

代わりにこれを使用してください:

echo "/var/log/dbhome_1/md5" | sed "s/dbhome_[0-9]\+/dbhome_\*/g"

[0-9]すべての数字を含む文字クラスです

したがって[0-9]\+、1 つ以上の数字に一致します

于 2013-06-30T19:45:35.550 に答える
0

スクリプトがにある場合 (タグを見たときに推測しますが、 script.shスクリプトの拡張子が間違っているように見えるその名前を見ると疑います)、純粋なのものを使用することもできます。位置パラメータにある可能性が高く、次の方法で目的が達成されます。/var/log/dbhome_1/md5$1

echo "${1//dbhome_+([[:digit:]])/dbhome_*}"

これが失敗すると思われる場合は、おそらくextglobシェルのオプションの動作がオフになっていることが原因です。この場合、オンにするだけです

shopt -s extglob

デモ:

$ shopt -s extglob
$ a=/var/log/dbhome_1234567/md5
$ echo "${a//dbhome_+([[:digit:]])/dbhome_*}"
/var/log/dbhome_*/md5
$ 

終わり!

于 2013-06-30T21:52:26.733 に答える