Печать и обработка альтернативных строк

Проблема с конфигами:
Измените домашнюю страницу Lynx по умолчанию в /etc/lynx.cfg с помощью оператора STARTFILE. Вы можете установить $LYNX _CFG в свой собственный файл конфигурации или установить $WWW _HOME на свою домашнюю или любую другую страницу.

export WWW_HOME="http://www.yahoo.com/"

Или вы можете просто указать адрес в командной строке:

lynx www.google.com
0
31.10.2019, 18:23
3 ответа

Предполагая, что вы хотите, чтобы нечетные -пронумерованные строки просто копировались в вывод, а четные строки обрабатывались командой и печатались результаты, мы можем использовать простую (одну -строку )Программа GNU sed:

#!/bin/sed -f

0~2s!.*!dc -e '& 2*p'!e

Здесь я сделал "командой" простое удвоение числа, но вы можете делать там все, что захотите.

Вот результат, который я получаю:

kk 
50
bb
68
cc
112
dd
134

Обратите внимание, что адресация «шаг» и флаг /e«выполнить» для sявляются расширениями GNU, не предусмотренными в стандартном sed.

0
28.01.2020, 02:22

Если я правильно вас понял:

sed -Ee '1~2s/^(.*)/echo \1/' -Ee 's/^([0-9]{2})/command \1/' file

Выход:

echo kk 
command 25
echo bb
command 34
echo cc
command 56
echo dd
command 67
1
28.01.2020, 02:22

Предполагая, что это всегда одна и та же команда(давайте назовем ееmy_cmd)которую вы хотите выполнить для содержимого четных строк в вашем файле (давайте назовем ее previous_output.txt), следующий скрипт должен работа:

#!/bin/bash

LABEL=1

while read line
do
  if (( LABEL == 1 ))
  then
    echo "$line"
    LABEL=0
  else
    my_cmd "$line"
    LABEL=1
  fi
done < previous_output.txt

Объяснить:

  • Первая строка — убедиться, что это интерпретируется с помощью bash.
  • Затем мы определяем переменную LABEL, которая равна 1 для тех строк, которые вы просто хотите "отобразить".
  • Затем мы перебираем все строки вашего файла, которые содержат «вывод некоторых команд», и читаем их по строкам -в переменную line.
  • ifнаша переменная LABELравна 1, мы просто выводим содержимое $line, используя echo, и помечаем следующую строку как аргументы команды, устанавливая LABELв 0.
  • elseмы запускаем my_cmdдля содержимого $lineи снова помечаем следующую строку как метку, устанавливая LABELв 1.
  • Последний оператор после doneуказывает bash получить ввод из указанного файла.

Чтобы узнать больше о программировании оболочки, я бы отослал вас к Расширенному руководству по написанию сценариев Bash .

2
28.01.2020, 02:22

Теги

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