Используя grep в сценарии оболочки

Я не могу определить имена ваших мониторов, так что приспосабливайтесь к этой строке кода. xrandr --output (mon1) --left-of (mon2)

0
25.02.2015, 20:06
3 ответа

Если у вас есть фиксированные записи для нужных идентификаторов, вы можете использовать

for identifier in 1 10 20 30; do
   grep -A 28 "INDEX : ${identifier}$" Test.txt
done

, когда у вас нет фиксированных идентификаторов, вы можете получить GREP без указания идентификатора:

grep -A 28 "^INDEX : " Test.txt

Я использую ^ Здесь для сопоставления линий индекса в начале линии.

1
28.01.2020, 02:36

Можно использовать grep с -f:

   -f FILE, --file=FILE
          Obtain patterns from FILE, one per line.

но для этого необходимо соответствующим образом отформатировать файл -идентификаторов , например он должен выглядеть следующим образом:

INDEX : 1
INDEX : 10
..........
INDEX : 100

вместо:

1,10....100

Если Вы используете -, то grep grep будет считывать шаблоны из stdin, таким образом, в одном случае, с awk (а также используя grep с -x, чтобы они совпадали со всей линией):

awk -F, '{for (i=1; i<=NF; i++) print "INDEX : "$i}' identifiers | grep -A28 -x -f - file

Если вы не хотите использовать ваш любимый инструмент для редактирования -идентификаторов на месте, а затем запустить:

grep -A28 -x -f identifiers file
1
28.01.2020, 02:36

Если вы хотите избежать многократного прохождения ваших данных с заданным фиксированным подмножеством идентификаторов, это один из возможных способов (для примеров индексов 1, 2 , 10):

sed -n '/INDEX : \(1\|2\|10\)$/,+28p'
0
28.01.2020, 02:36

Теги

Похожие вопросы