Вы не указываете, как используется FILE_VAR
, но если я попробую $ (eval $ (FILE_VAR))
, то проблема в том, что cat
не делает то, что вы хотите, вне правила. Обернуть его в $ (shell)
может быть лучше:
define FILE_VAR
$(shell cat /output/1.txt > /output/2.txt)
$(eval s := $(shell cat /output/2.txt))
$(eval FILENAME_BIN=$(word 1, $(s)).$(word 2, $(s)).$(word 3, $(s)).bin)
$(eval FILENAME_JFFS2=$(word 1, $(s)).$(word 2, $(s)).$(word 3, $(s)).jffs2)
endef
$(eval $(FILE_VAR))
all:
echo $(FILENAME_BIN)
И я использовал >
вместо >>
, поэтому 2.txt не увеличивается при каждом запуске .
Это эквивалент sed:
$ cat file9
<SubRecord1>
<Property Name=Name>My Main Search Keyword</Property>
<Property Name=Prompt>Dummy</Property>
<Property Name=Default>Value i'm Concerned to Modify</Property>
</SubRecord1>
<SubRecord2>
<Property Name=Name>My Main Search Keyword</Property>
<Property Name=Prompt>Dummy</Property>
<Property Name=Default>Do not Modify</Property>
</SubRecord2>
$ sed -r '/\bSubRecord1\b/!b;n;n;n;s/(<Property Name=Default>)(.*)(<\/Property>)/\1AAAA\3/' file9
<SubRecord1>
<Property Name=Name>My Main Search Keyword</Property>
<Property Name=Prompt>Dummy</Property>
<Property Name=Default>AAAA</Property>
</SubRecord1>
<SubRecord2>
<Property Name=Name>My Main Search Keyword</Property>
<Property Name=Prompt>Dummy</Property>
<Property Name=Default>Do not Modify</Property>
</SubRecord2>
Использование границ слов \b
гарантирует, что шаблон sed /SubRecord/
не будет соответствовать SubRecord1
или SubRecord2
XML должен обрабатываться инструментом, поддерживающим XML.
XMLStarlet является таким инструментом.
Вот как вы устанавливаете значение узла Property
, чей атрибут Name
имеет значение Default
и значение которого не равно abc.txt
. ] или xyx
:
xml ed -u '//SubRecord/Property[@Name="Default" and . != "xyx" and . != "abc.txt"]' -v 'abc.txt' file.xml
Дан файл XML, подобный следующему:
<?xml version="1.0"?>
<Record>
<SubRecord>
<Property Name="Name">My Main Search Keyword</Property>
<Property Name="Prompt">Dummy</Property>
<Property Name="Default">zzz</Property>
</SubRecord>
<SubRecord>
<Property Name="Name">My Main Search Keyword</Property>
<Property Name="Prompt">Dummy</Property>
<Property Name="Default">abc.txt</Property>
</SubRecord>
<SubRecord>
<Property Name="Name">My Main Search Keyword</Property>
<Property Name="Prompt">Dummy</Property>
<Property Name="Default">xyx</Property>
</SubRecord>
</Record>
получается
<?xml version="1.0"?>
<Record>
<SubRecord>
<Property Name="Name">My Main Search Keyword</Property>
<Property Name="Prompt">Dummy</Property>
<Property Name="Default">abc.txt</Property>
</SubRecord>
<SubRecord>
<Property Name="Name">My Main Search Keyword</Property>
<Property Name="Prompt">Dummy</Property>
<Property Name="Default">abc.txt</Property>
</SubRecord>
<SubRecord>
<Property Name="Name">My Main Search Keyword</Property>
<Property Name="Prompt">Dummy</Property>
<Property Name="Default">xyx</Property>
</SubRecord>
</Record>
(первая SubRecord
была изменена)
XMLStarlet доступен по адресу http://xmlstar.sourceforge.net/ (но сначала проверьте свой менеджер пакетов). Иногда его исполняемый файл называется xmlstarlet
, а не просто xml
.
Вы не можете анализировать [X]HTML/XML с помощью регулярных выражений. Поскольку HTML/XML не может быть проанализирован регулярным выражением. Regex не является инструментом, который можно использовать для правильного анализа HTML/XML. Регулярные выражения — это инструмент, недостаточно сложный для понимания конструкций, используемых в HTML/XML. HTML/XML не является обычным языком и, следовательно, не может анализироваться с помощью регулярных выражений. Запросы регулярных выражений не приспособлены для разбиения HTML/XML на значимые части. Даже расширенные нерегулярные регулярные выражения, используемые в Perl, не справляются с задачей разбора HTML/XML. Ты никогда не заставишь меня сломаться. HTML/XML — это языки достаточной сложности, чтобы их нельзя было проанализировать с помощью регулярных выражений. Даже Джон Скит не может анализировать HTML/XML с помощью регулярных выражений. Каждый раз, когда вы пытаетесь разобрать HTML/XML с помощью регулярных выражений, нечестивое дитя плачет кровью девственниц, а русские хакеры взламывают ваше веб-приложение. Разбор их с помощью регулярных выражений вызывает испорченные души в царство живых. Они и регулярное выражение идут рука об руку, как любовь, брак и ритуальное детоубийство.
inal snuf
финг о ф ложь s человека ВСЁ LOŚ͖̩͇̗̪̏̈́T ALL ISL OST th e pon̷y он пришел s he c̶̮om ͎a̧͈͖r̽̾̈́͒͑e
n OT Rè̑ͧ̌aͨl̘̝̙ͤ̾̆ Za̡͊͠͝lg ͮ҉̯͈͕̹̘ o͇̹̺ɲ̴ȳ̳ th̘ ͖͖̉̉ ͠p̯͍̭o̚ n̐y̡ h̸̡̪̯ͨ͊̽̅̾ȩ̬̩̾͛ͪ̈͘ ̶̧̨̹̭̯ͧ̾ͬc̷̙̝͖ͭ̏ͥͮ͟oͮ͏̮̪̝͍m̖͊̒ͪͩͬ̚̚͜ȇ̴̟̟͙̞ͩ͌͝