1

交換しようとしています。

randomtext{{XX icon}}

randomtext{{ref-XX}}

..ファイル内で、XX は 2 つまたは 3 つの小文字の任意のシーケンスである可能性があります。


「icon」を「ref-」に置き換える前に、単語の順序を awk で並べ替えようとしました。

awk '{print $2, $1}'

..しかし、最初の単語の前にも 2 番目の単語の後にもスペースがないため、中かっこが台無しになりました。

icon}} {{XX

sed を使用してこれを達成する最も簡単な方法は何ですか?

4

2 に答える 2

2
 sed 's/{{\([a-z]\{2,3\}\)\sicon/{{ref-\1/'

このワンライナーは、代替コマンドを使用していs/PATTERN/REPLACE/ます。{{2 つの括弧に一致します。\([a-z]\{2,3\}\)2 つまたは 3 つの小文字に一致するパターンをキャプチャします。\s空白に一致します。iconリテラル文字列「icon」に一致します。{{....icon次に、一致したもの、つまりリテラル文字列{{ref-とキャプチャされた 2 文字または 3 文字の単語を置き換えます。

于 2012-08-15T13:27:48.577 に答える
1

#正規表現区切り文字としてハッシュ タグ ( ) を使用した、より一般的なバージョンを次に示します。

sed 's#{{\([^ ]*\) [^}]*#{{ref-\1#'
  • {{二重開き中括弧で正規表現を固定します。
  • \([^ ]*\)スペースまですべてをキャプチャします。
  • [^}]*閉じ中括弧まですべてを食べます。
于 2012-08-15T14:41:17.713 に答える