Вот один из способов Perl:
perl -ne 'if (/^adc\s+\w+\s+(\w+)/) { print "Name: $1\n" }
elsif (/^\s*rules\s*{/) { $inrule = 1; }
elsif (/}/) { $inrule = 0; }
elsif (/^\s*(\S*)/) { print "Rule: $1\n" if $inrule; }'
это проходит через каждую строку файла, печатает имя :
Линия, когда
Он видит линию ADC
, а затем делает плохую попытку распознавания
Правила {}
Блоки, печать каждую строку из них как правило:
.
Было бы гораздо более надежно использовать правильный парсер для вашего ввода формат; Этот одноклассник сломается, если макет не совсем так, как в ваш вопрос.
Вы можете сделать это, используя выходное перенаправление
, как показано ниже.
$ bc -l <<<"obase=2;$num" > register.txt
Вышеуказанная команда перезаписывает любые более старые результаты. В случае, если вы хотите добавить ваши результаты.
$ bc -l <<<"obase=2;$num" >> register.txt
>>
- перенаправляющие вывод (stdout) сообщений в режиме Append.
>
- Перенаправить вывод (stdout) сообщения в режиме перезаписания.
<<<
- ЗДЕСЬ Строки, слово расширяется и подается в команду на его стандартном входе.
Вместо того, чтобы использовать TEE, просто используйте I / O-Redirection оболочки:
echo "obase=2;$num1" | bc >>register.txt
>>
- Spectement вызывает перенаправленные вывод (>
Перенаправить, >>
Добавление) в файл.
Флаг - флаг
TEE
вызывает также приложение к файлу. Вам нужно только Tee
, если вы хотите, чтобы вывод был показан в оболочке и , перенаправляемый в файл.
Команда tee
предназначена для разделения вывода, чаще всего используемая для получения текста в файл и на экран.
Просто оставьте это и используйте выходное перенаправление (дополнение) к файлу с помощью >>
:
echo "obase=2;$num1" | bc >> register.txt