Задать вопрос
@Garkul

Bash не видит переменную после выхода из цикла. В чем может быть проблема?

Здравствуйте
Пытаюсь написать скрипт для замены одного пула имен на другой в файле. При этом файл становится пустым после скрипта :(

Сам скрипт:
# name - файл с соответствием имен (два столбца)
# file - файл, где нужно произвести замены

flag=0
cat $name | while read line
do
  if  [[ $flag == 0 ]];then
    flag=1
  else
    replase=$(echo $line | awk '{print $1}')
    search=$(echo $line | awk '{print $2}')
    sed 's/${search%$'\n'}/${replase%$'\n'}/g' $file > $file
  fi
done

echo $search

Переменную search после цикла не видит
  • Вопрос задан
  • 267 просмотров
Подписаться 2 Простой 1 комментарий
Решения вопроса 2
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
файл становится пустым после скрипта
sed 's/${search%$'\n'}/${replase%$'\n'}/g' $file > $file


неудивительно, >$file делает файл пустым ещё до вызова sed. Чтобы редактировать файл на месте у sed есть ключ -i:
sed 's/${search%$'\n'}/${replase%$'\n'}/g' -i "$file"
Ответ написан
xotkot
@xotkot
хорошо есть и хорошо весьма
а ведь можно проще:
awk '{system("sed -i s/"$1"/"$2"/g file.txt")}' name.txt
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@voleg4u
http://www.voleg.info/
Всё что находится после трубы (pipe | ) , выполняется в новом шелле, поэтому все переменные в вашем while умирают вместе с ним. Надо переписать без использования трубы:
while read line ; do
  echo $line
done < file
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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