web-dev-qa-db-ja.com

UNIXの行から数値を抽出する方法

属性ICountの最初のオカレンスを見つける必要があり、その値を返す必要があります。属性からの番号のみ。入手方法は?

< FCount = "1" ICount = "0" Ccount= "1">
2
karthick127

grepおよびsedを使用してa)ICountに続く整数(!)番号を取得し(任意の桁数)、b)ICount指定子を削除します:

grep -o 'ICount = "[0-9]\{1,\}' | sed 's/.*"//'
1
Fiximan

awk経由:

awk -F"ICount *= *\"" '{sub(/".*/,"",$2); print $2}'

% <<<'< FCount = "1" ICount="0" Ccount= "1">' | awk -F"ICount *= *\"" '{sub(/".*/,"",$2); print $2}'
0

または他のすべての属性

% <<<'< FCount = "1" ICount="0" Ccount= "1">' | awk -F"Ccount *= *\"" '{sub(/".*/,"",$2); print $2}'  
1

% <<<'< FCount = "1" ICount="0" Ccount= "1">' | awk -F"FCount *= *\"" '{sub(/".*/,"",$2); print $2}' 
1
0
A.B.

単独のツールを使用することをお勧めします:

sed -n '/.*ICount\s*=\s*"\?/{s///;s/[^0-9].*//;p;q;}' file

より古典的

sed -n 's/.*ICount\s*=\s*"\?\([0-9]\+\)"\s.*/\1/p;/ICount\s*=/q' file

またはPCREを使用したgrep

grep -m1 -Po 'ICount\s*=\s*"?\K[0-9]+' file
0
Costas