Perl находит и заменяет, пишет каждый файл

Ваше меню, показанное выбором, будет похоже:

1) apache
2) named
3) sendmail
Select an option and press Enter: 

В это время Вы входите "1" или "2" или "3": Вы не вводите слово.

Кроме того, select циклично выполнится, пока это не будет видеть a break команда, таким образом, Вы хотите это:

  case $opt in
        "apache")
          date
          break
          ;;
        "named")
          echo "test"
          break
          ;;
        "sendmail")
          echo "test 2"
          break
          ;;
        *) echo "invalid option";;
  esac

Если бы Вы хотели позволить пользователю вводить или номер или слово, то Вы могли записать это:

select opt in "${options[@]}"; do
  case "$opt,$REPLY" in
    apache,*|*,apache)     do_something; break ;;
    named,*|*,named)       do_something; break ;;
    sendmail,*|*,sendmail) do_something; break ;;
  esac
done

Запятая не имеет никакого синтаксического значения, она должна просто там смочь скопировать соответствие на любом переменная $REPLY (который является тем, что пользователь на самом деле ввел), или переменная $opt

2
29.01.2011, 23:06
2 ответа

Это должно быть подходящей заменой:

grep -l foo * | sed -e 's/[^/0-9A-Z_a-z]/\\&/g' | xargs sed -i 's/foo/bar/g'

2
27.01.2020, 22:01
  • 1
    Обратите внимание что специальные символы в именах файлов (\'" и пробел), должен быть защищен от расширения xargs. –  Gilles 'SO- stop being evil' 30.01.2011, 21:10

Попробуйте это:

perl -e 's/foo/bar/g;' -pi `egrep -l 'foo' $(find -type f)`

Это ищет регулярное выражение и возвращается на именах файлов, где это найдено. Затем Perl будет воздействовать только на те файлы.

2
27.01.2020, 22:01
  • 1
    Мог бы также выполнить $ (egrep-rl 'нечто'.) –  jsbillings 30.01.2011, 01:37
  • 2
    Используя результат замены команды, поскольку не работает список имен файлов, если имена файлов могут содержать специальные символы (\[*? или пробел). Это - также проблема в вопросе. –  Gilles 'SO- stop being evil' 30.01.2011, 21:11

Теги

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