Сценарий оболочки: Как вырезать часть строки - PullRequest
13 голосов
/ 18 сентября 2010

У меня есть следующая строка

â   â³ eGalax Inc. USB TouchController          id=9    [slave  pointer  (2)]
â   â³ eGalax Inc. USB TouchController          id=10   [slave  pointer  (2)]

и я хочу получить список идентификаторов?Как это можно сделать, используя sed или что-то еще?

Ответы [ 6 ]

34 голосов
/ 18 сентября 2010

Я вставил содержимое вашего примера в файл с именем so.txt.

$ cat so.txt | awk '{ print $7 }' | cut -f2 -d"="
9
10

Объяснение:

  1. cat so.txt напечатает содержимое файла в stdout.
  2. awk '{ print $7 }' напечатает седьмой столбец, то есть тот, который содержит id=n
  3. cut -f2 -d"=", обрежет вывод шага # 2, используя = в качестве разделителя, и получит второйстолбец (-f2)

Если вы также хотите получить id=, то:

$ cat so.txt | awk '{ print $7 }' 
id=9
id=10
3 голосов
/ 18 сентября 2010

Используйте регулярное выражение, чтобы поймать номер идентификатора и заменить целую строку номером. Нечто подобное должно сделать это (сопоставить все до "id =", затем сопоставить любое количество цифр, затем сопоставить остальную часть строки):

sed -e 's/.*id=\([0-9]\+\).*/\1/g'

Сделайте это для каждой строки, и вы получите список идентификаторов.

2 голосов
/ 19 сентября 2010
$ ruby -ne 'puts $_.scan(/id=(\d+)/)' file
9
10
2 голосов
/ 18 сентября 2010

Perl-решение:

perl -nE 'say $1 if /id=(\d+)/' filename
1 голос
/ 18 сентября 2010

Вы можете awk сделать все это без использования cut:

awk '{print substr($7,index($7,"=")+1)}' inputfile

Вы можете использовать split() вместо substr(index()).

0 голосов
/ 23 сентября 2010

Предполагая ввод

{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

См. Также

Расширение параметров оболочки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...