У меня большой текстовый файл (myfile.txt), где ровно для одной строки я пытаюсь заменить значение «0,9999999999» другим числом, скажем, «0,111111111».
expression "if((CONDITION1==1),0.999999999,CATEGORY1)"
Линия может быть однозначно идентифицирована путем поиска строки как перед ней, так и за ней (должно быть и вместе, или шаблон не уникален), или в этом случае
'expression "if((CONDITION1==1),'
and
',CATEGORY1)"'
После исследования нескольких других постов я обнаружил, что в моем случае сложной задачей является
- , идентифицирующая конкретную строку по нескольким шаблонам, и
- , заменяющая строку, котораяпоиск невозможен сам по себе (поскольку он может измениться)
Первая проблема, которую я вижу, была решена в других сообщениях, но я озадачен второй.
Iпопробовал несколько разных способов, но ни один из них не дает нужную вещь, самый близкий, который я получил:
sed -n '/if((CONDITION1==1).CATEGORY1)/{ s/\,*\,/\,0.111111111\,/p }' myfile.txt
Где я пытаюсь идентифицировать строки, просматривая часть строк префикса и суффикса,и затем пытаюсь заменить все между двумя запятыми и включая их.
Мои вопросы:
- что я делаю не так?
- Является ли sed лучшим инструментом для этой задачи, или awk или perl лучше?Спасибо.
=============== РЕДАКТИРОВАТЬ ==============
Я обновилмой код основан на версии @Ed, чтобы можно было прочитать значение из переменной, извлеченной из этого файла, во время выполнения кода на основе ввода.Надеюсь, это кому-нибудь поможет позже:
#test.sh
month= $1
VAL= $(cat data_$month.dat | awk 'NR==2')
echo "VAL is:" $VAL
sed -i 's/\(expression "if((CONDITION1==1),\)[^,]*\(,CATEGORY1)"\)/\1'"${VAL}"'\2/' file