2014-09-18 4 views
-2
bash-3.2$ FNAME=$1 
bash-3.2$ OLD_NO=$(grep "_version=" | awk -F '"' '{print $12}' $FNAME) 

Строка 2, похоже, не работает для меня. Я не закрываю/цитирую его правильно? кажется повеситьBASH с использованием grep и awk внутри переменной

Обновленный сценарий, чтобы отразить ниже предложения

echo $OLD_NO 
OLD_NO=$(grep '_version=' "$FNAME" | awk -F '"' '{print $12}') 
#Get the version of the 
echo "What do you want to update release number to?" 
REPLACEMENT="_version="$NEW_NO 
echo $REPLACEMENT 
sed -i ''s/$OLD_NO/$REPLACEMENT/g'' $FNAME 

~

получить новую ошибку

bash-3.2$ ./vu reader.xml 

What do you want to update release number to? 
_version= 
sed: -e expression #1, char 0: no previous regular expression 

Работает в Баш хотя

bash-3.2$ grep _version market_rules_cd.reader.xml | awk -F '"' '{print $12}' 

14.8.21.1

+0

Что нужно для '$ 1' в последнем? –

+2

'grep' ждет своего ввода на стандартном входе; Я думаю, вы просто хотите поставить '$ FNAME' после' grep', а не 'awk'. – chepner

+0

Вы изменили свой вопрос, так как я ответил. (например, включая мой ответ в вашем коде). Я отменил эти изменения. Задайте новый вопрос, если вам нужна дополнительная помощь. – hek2mgl

ответ

2

Линия висит, потому что grep '_version=' заблокирует ожидание на stdin, так как вы не передали аргумент имени файла. Чтобы остановить его от прошивки, передайте имя файла grep, а не awk. AWK будет результат процесса Grep в:

OLD_NO=$(grep '_version=' "$FNAME" | awk -F '"' '{print $12}') 

Btw: Работа может быть сделано с awk только, вам не нужно Grep:

OLD_NO=$(awk -F '"' '/_version=/ {print $12}' "$FNAME") 

Обратите внимание, что AWK программы, имеющие следующую форму :

condition { action } [; more of them ] 

Вы можете опустить условие, если действие должно применяться к каждой строке (это широко распространено СЕПГ), однако в этом случае вы можете использовать регулярное выражение условие, чтобы ограничить действие только для строк, содержащих _version=:

/_version=/ { print $12 } 
+2

Я думаю, что 'FNAME' - это имя файла для поиска, а не фактическое значение для поиска. – chepner

+0

@chepner thx для подсказки! обновил ответ. – hek2mgl

+0

это не возвращает результатов, если я использую его в оболочке –

Смежные вопросы