2

角かっこで囲まれた数字を切り取って、テキストの先頭に配置するにはどうすればよいですか?

例えば:

some_text123_[12345]_some_text

after:
12345_some_text123_[]_some_text
4

3 に答える 3

1

sedマッチングを使用してみてください:

  1. 文字のグループ
  2. ブラケット、数字、別のブラケット
  3. 別のキャラクターグループ

正規表現は(.*) (\[[0-9]+\]) (.*)(スペースなしで)可能性があります。次に、一致をグループに2-1-3順番に置き換えます。

$ echo "some_text_[12345]_some_text" | sed "s_(.*)\[([0-9]+)\](.*)_\2\1[]\3_g"
12345some_text_[]_some_text
于 2013-03-26T19:00:24.380 に答える
1

使ってみperlました。

このperlワンライナーは機能するはずです。

$ echo some_text123_[123]_some_text | perl -ne 'print "$1_", "$`", "$'\''\n" if /\[(\d+?)\]/;' -

perl正規表現エンジンからの特別な変数を説明するだけです:

$1-マッチングで保持したいものです。

$`-試合前のすべて

$'-試合後のすべて

于 2013-03-26T19:41:47.130 に答える
1

ホールドスペースを使用して物を動かす別のsedバリエーションがあります。それが最善の方法というわけではありませんが、それは一種の楽しみです。

sed -e 'h;s/.*\[\([0-9]*\)\].*/\1/;x;s/\[.*\]/[]/;H;g;s/\n//'

hコマンドは、現在の行をホールドスペースにコピーします。次に、[と]の間の数字を分離します。xは元の行の番号を交換するため、ホールドスペースには番号のみが含まれます。次に、今回は[]の間のすべてを破棄し、その結果を保留スペースの数値に追加します。ホールドスペースを取り戻し(g)、埋め込まれた改行を削除します。

$ echo "some_text123_[12345]_some_text" | sed -e 'h;s/.*\[\([0-9]*\)\].*/\1/;x;s/\[.*\]/[]/;H;g;s/\n//'
12345some_text123_[]_some_text
于 2013-03-26T20:49:38.957 に答える