1

だから私は次のスクリプトを持っています(ただのテスト)

 #!/bin/bash
 for file in *
 do
 echo $file 
 done

そして、ファイルの周りに括弧を追加しようとしています。また、変数ファイルの完全な名前がわからないふりをしています。

  cat sc.sh | sed 's/fi*/(&)/g'
  #!/bin/bash
  (f)or (fi)le in *
  do
  echo $(fi)le
  done

したがって、基本的には、fi で始まる単語を一致させ、それらの周りに括弧を追加しようとしています。私は何を間違っていますか?それにいくつかのバリエーションを試しましたが、うまくいきませんでした。私が見ることができることから、コマンドは任意の f または fi に一致し、それらの周りに括弧を追加しますが、単語全体には追加しません。なんで?

どんな助けでも大歓迎です。

4

1 に答える 1

1

正規表現fi*は、f の後に 0 個以上の i が続くものを探しています。おそらく、次のようなものがもっと必要です。

cat tmp | sed 's/\bfi[^ ]*/(&)/g'

\bfi'fi' が後に続く単語境界 (単語の開始点) を探します。次に[^ ]*、単語内の残りの (スペース以外の) 文字と一致します。

于 2012-06-05T18:04:20.050 に答える