0

私は言うラインを持っています

jan 02:12:00 YRU QRS : ASP.net Bird
feb 02:12:00 YRU QRS : ASP.net Dog

スクリプトでパターン検索をASP.NET行い、そこから 10 文字を各行に出力して、BirdDog

ありがとう

4

6 に答える 6

3

を使用した片道perl

perl -ne 'm/asp\.net\s+(.{0,10})/i && print "$1\n"' infile

それは以下をもたらします:

Bird
Dog

perlワンライナーの構文を説明する編集:

m/.../i正規表現を行全体と一致させようとします。iフラグは大文字と小文字を区別しません。正規表現は、リテラルasp.netとスペースに加えて、貪欲な方法で 0 から 10 までの任意の数の文字です。それが成功した場合は、かっこの間で一致したものを出力する次の命令を実行します。

于 2013-01-19T21:25:04.420 に答える
3
perl -lne 'print $1 if /ASP.net (.{0,10})/'
于 2013-01-19T21:25:57.743 に答える
3

awkワンライナー:

awk -F'ASP\\.net' '{print substr($2,0,10)}' file

これは の直後ASP.netつまり から始まる10 文字を出力することに注意してくださいspace。スペースが必要ない場合は、次の行を使用してください。

 awk -F'ASP\\.net ' '{print substr($2,0,10)}' file
于 2013-01-19T21:32:12.920 に答える
2

GNU と BSD の grep には適切な拡張子--only-matching、または-oがあり、一致する行の部分のみが出力されます。

grep -Eio 'asp\.net.{0,10}' <<< 'jan 02:12:00 YRU QRS : ASP.net Bird
feb 02:12:00 YRU QRS : ASP.net Dog'
ASP.net Bird
ASP.net Dog

Bash は正規表現機能を使用してこれを行うことができますが、最初に大文字と小文字を区別しないマッチングを有効にしたほうがよいでしょう。

shopt -s nocasematch
while read; do
    if [[ $REPLY =~ asp\.net(.{0,10}) ]]; then
        echo "${BASH_REMATCH[1]}"
    fi
done <<< 'jan 02:12:00 YRU QRS : ASP.net Bird
feb 02:12:00 YRU QRS : ASP.net Dog'
 Bird
 Dog
于 2013-01-19T21:22:23.587 に答える
0

ファイル「input.txt」内にテキストがあると仮定すると、次のワンライナーで機能します。

cat input.txt | awk '/ASP\.net/ {print substr($0, index($0,"ASP.net") + length("ASP.net"), 10)}'

説明:

  • 「ASP.net」というテキストを含む行
  • 10文字を印刷する
  • 「ASP.net」の直後から
于 2013-01-19T21:32:14.610 に答える
0

これはうまくいくかもしれません(GNU sed):

sed -nr '/.*ASP\.net(.{,10}).*/s//\1/p' file
于 2013-01-19T21:37:21.623 に答える