私は言うラインを持っています
jan 02:12:00 YRU QRS : ASP.net Bird
feb 02:12:00 YRU QRS : ASP.net Dog
スクリプトでパターン検索をASP.NET
行い、そこから 10 文字を各行に出力して、Bird
とDog
ありがとう
を使用した片道perl
:
perl -ne 'm/asp\.net\s+(.{0,10})/i && print "$1\n"' infile
それは以下をもたらします:
Bird
Dog
perl
ワンライナーの構文を説明する編集:
m/.../i
正規表現を行全体と一致させようとします。i
フラグは大文字と小文字を区別しません。正規表現は、リテラルasp.net
とスペースに加えて、貪欲な方法で 0 から 10 までの任意の数の文字です。それが成功した場合は、かっこの間で一致したものを出力する次の命令を実行します。
perl -lne 'print $1 if /ASP.net (.{0,10})/'
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
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
ファイル「input.txt」内にテキストがあると仮定すると、次のワンライナーで機能します。
cat input.txt | awk '/ASP\.net/ {print substr($0, index($0,"ASP.net") + length("ASP.net"), 10)}'
説明:
これはうまくいくかもしれません(GNU sed):
sed -nr '/.*ASP\.net(.{,10}).*/s//\1/p' file