10

## XXX##のすべてのオカレンスを${XXX}に変換するには、sedを使用する必要があります。Xは、任意の英字または「_」にすることができます。私は次のようなものを使用する必要があることを知っています:

's/##/\${/g'

しかしもちろん、##FOO##を${FOO$ {に変換するため、これは適切ではありません。

テイカーはいますか?- ドン

4

7 に答える 7

12

より良い代替正規表現のショットを次に示します。

's/##\([a-zA-Z_]\+\)##/${\1}/g'

または、正確に 3 文字と仮定すると、次のようになります。

's/##\([a-zA-Z_]\{3\}\)##/${\1}/g'
于 2008-10-24T18:45:16.990 に答える
2
  • アルファと '_' を '\(' と '\)' 内にカプセル化し、右側でそれを '\1' で参照します。
  • 「+」は 1 つ以上のアルファと「_」に一致します (#### が表示される場合)。
  • 最後に「g」オプションを追加して、すべての一致を置き換えます(この場合、これがあなたがやりたいことだと思います)。
's/##\([a-zA-Z_]\+\)##/${\1}/g'
于 2008-10-24T18:48:07.657 に答える
1

これを使って:

s/##\([^#]*\)##/${\1}/

ところで、「s」演算子の右側で$をエスケープする必要はありません。

于 2008-10-24T18:41:36.453 に答える
1
sed 's/##\([a-zA-Z_][a-zA-Z_][a-zA-Z_]\)##/${\1}/'

\(...\)覚えています...そして展開のように参照され\1ます。正気を保つために一重引用符を使用してください。

この下のコメントに記載されているように、これは次のように契約することもできます。

sed 's/##\([a-zA-Z_]\{3\}\)##/${\1}/'

この回答は、例で正確に3文字を一致させる必要があることを前提としています。ハッシュマークの間にあるものに応じて、複数のバリエーションがあります。重要な部分は、一致した文字列の一部を記憶することです。

于 2008-10-24T18:44:13.077 に答える
1
echo "##foo##" | sed 's/##/${/;s//}/'
  • sデフォルトで1回だけ変更
  • s//take last 検索パターンが使用されたので、 seconds s も取り##、2 番目のオカレンスのみが存在します
于 2014-10-14T09:09:00.657 に答える
0

sed の/([^az] [^AZ] [^0-9]*)/(&)/pg

于 2012-09-27T08:59:29.793 に答える