Вопрос по коммандной строке FreeBSD

Тема в разделе "WASM.HEAP", создана пользователем _DEN_, 22 июн 2007.

  1. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Только не пинайте ногами - я в этом валенок))

    Надо из командлайна сделать следующее:

    Начиная с текущего пути и внутрь рекурсивно найти все файлы с расширением *.php, после чего внутри каждого заменить <h2> на <h1>, и </h2> на </h1>.
     
  2. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Код (Text):
    1. clear
    2. count_mak=0
    3. count_templ=0
    4. parse_files()
    5. {
    6.     for i in *
    7.     do
    8.     if [ -d "$i" ]
    9.     then
    10.         cd "./$i"
    11.         parse_files
    12.     fi
    13.     done
    14.     for f in *".php"
    15.     do
    16.     if [ -f "$f" ]
    17.     then
    18.         count_mak=`expr $count_mak + 1`
    19.         echo "$f"
    20.         sed 's/<h2>/<h1>' "$f" > "$f.temp_file123"
    21.         rm -f "$f"
    22.         mv "$f.temp_file123" "$f"
    23.     fi
    24.     done
    25.     for f in *".php"
    26.     do
    27.     if [ -f "$f" ]
    28.     then
    29.         count_templ=`expr $count_templ + 1`
    30.         echo "$f"
    31.         sed 's/<\/h2>/<\/h1>' "$f" > "$f.temp_file123"
    32.         rm -f "$f"
    33.         mv "$f.temp_file123" "$f"
    34.     fi
    35.     done
    36.     cd ..
    37.     return
    38. }
    39.  
    40. parse_files
    41.  
    42. echo "count_first_replace = $count_mak"
    43. echo "count_second_replace = $count_templ"
    Примерно такая шляпа на баше.

    Была ошибка, подправил.
     
  3. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    Код (Text):
    1. find . -name "*.php" -exec sed -n -i 's/<\([/]*\)h2>/<\1h1>/gp' {} \;
     
  4. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    Booster
    зачем так сложно
     
  5. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    rei3er

    Просто выполнить такую команду и все?
     
  6. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    _DEN_
    угу
     
  7. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    rei3er


    Код (Text):
    1. sed: 1: "./top.php": invalid command code .
    И так для всех php :-(
     
  8. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    rei3er

    Код (Text):
    1. find . -name "*.php" -exec sed -n -i "" 's/<\([/]*\)h2>/<\1h1>/g;p' {} \;
    Вот так работает.
     
  9. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    _DEN_
    может быть
    я проверял не на BSD
     
  10. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    rei3er
    Только что проверил -).
    Не работает у меня это. Вернее на экран или в файл вывести это можно, но как сохранить замену в каждом файле не врублюсь. И что за опция -i у sed?
    IMHO в exec несколько команд не засунешь, или я не прав?

    P.S проверяю на Linux.
     
  11. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    Booster
    см. man
    какой у тебя sed (версия)?
     
  12. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    rei3er
    Да, я уже понял, что старые версии не поддерживают этот флаг.
    У меня на работе 3.2 и я обломался. -). Поэтому мне приходится вызывать в exec другой скрипт, в котором sed в начале записывает во временный файл, а потом уже из него записывать в нужный -). Вот такие пироги.