私は次の文字列を持っています
â â³ eGalax Inc. USB TouchController id=9 [slave pointer (2)]
â â³ eGalax Inc. USB TouchController id=10 [slave pointer (2)]
idのリストを取得したいですか?これをsedなどを使用してどのように実行できますか?
サンプルの内容をso.txt
という名前のファイルに貼り付けました。
$ cat so.txt | awk '{ print $7 }' | cut -f2 -d"="
9
10
説明:
cat so.txt
は、ファイルの内容をstdout
に出力します。awk '{ print $7 }'
は7番目の列、つまりid=n
を含む列を印刷しますcut -f2 -d"="
は、区切り文字として=
を使用してステップ#2の出力をカットし、2番目の列(-f2
)を取得しますid=
も取得したい場合:
$ cat so.txt | awk '{ print $7 }'
id=9
id=10
正規表現を使用してID番号を取得し、行全体を番号に置き換えます。このようなことを行う必要があります(「id =」までのすべてに一致し、次に任意の桁数に一致し、残りの行に一致します)。
sed -e 's/.*id=\([0-9]\+\).*/\1/g'
これをすべての行に対して実行すると、IDのリストが取得されます。
Perlソリューション:
Perl -nE 'say $1 if /id=(\d+)/' filename
$ Ruby -ne 'puts $_.scan(/id=(\d+)/)' file
9
10
awk
を使用せずに、cut
をすべて実行させることができます。
_awk '{print substr($7,index($7,"=")+1)}' inputfile
_
split()
の代わりにsubstr(index())
を使用できます。
の入力を想定
{Anything}id={ID}{space}{Anything}
{Anything}id={ID}{space}{Anything}
-
#! /bin/sh
while read s; do
rhs=${s##*id=}
id=${rhs%% *}
echo $id # Do what you will with $id here
done <so.txt
または、常に7番目のフィールドである場合
#! /bin/sh
while read f1 f2 f3 f4 f5 f6 f7 rest
do
echo ${f7##id=}
done <so.txt
関連項目