Почему этот awk управляет не, играют также с находкой, как sed делает?

Во-первых, grep: Можно сказать, что это для не поиска двоичных файлов - использует -I переключатель - как страница справочника говорит:

-I     Process a binary  file  as  if  it  did  not  contain  matching data;
       this  is  equivalent  to  the --binary-files=without-match option.

Во-вторых, find: Для избегания использования xargs и большой передачи по каналу используйте -exec тест find программа. Можно легко создать цепочку логических тестов с помощью этого: каждый последовательный -exec выполняется, если все предыдущие команды возвратились 0 (законченный успешно).

4
21.08.2018, 05:28
2 ответа

В первую очередь, необходимо закончить -exec действие с {} \;.

Во-вторых, awk не изменяйте файл на месте как sed сделайте (с -i опция), таким образом, необходимо отправить вывод во временный файл, затем перемещают это в исходный файл.

Создайте сценарий (скажите, что мы называем его replace) со следующим содержанием:

#!/bin/sh
tfile=$(mktemp)
awk '/<!-- STARTREPLACE1 -->/{p=1;print;print "A whole new world!"} 
     /<!-- ENDREPLACE1 -->/  {p=0}' "$1" >"$tfile" && \
  mv "$tfile" "$1"

дайте ему исполняемые полномочия

chmod +x ./replace

затем выполненный

find "$DIR" -type f -iname '*.html' -exec ./replace {} \;
8
27.01.2020, 20:48
  • 1
    Кажется, что использование временного файла является хорошей идеей. Шанс, который Вы могли объяснить, как я делаю это? Или я могу изменить awk для sed и получить тот же результат? –  Questioner 02.04.2012, 16:48
  • 2
    @DaveMG: Я добавил что-то к своему ответу. –  enzotib 02.04.2012, 17:11
  • 3
    Большое спасибо за обеспечение метода для действия на все файлы. Единственная вещь, кажется, существует ошибка в коде где-нибудь, потому что после выполнения./заменять сценариев, все файлы HTML абсолютно пусты. Хм.. –  Questioner 02.04.2012, 18:08
  • 4
    @DaveMG: да, был, я исправил его теперь. Я надеюсь, что Вы протестировали его на копии файлов. –  enzotib 02.04.2012, 18:10
  • 5
    Это работает теперь, но только если, где Вы имеете / {p=0}' заменяется /{p=0}!p'. Еще раз спасибо так для кода! –  Questioner 02.04.2012, 18:55

И для премии:

gawk '{!p} /<!-- STARTREPLACE1 -->/{print "A whole new world!";p=1}/<!-- ENDREPLACE1 -->/{p=0}'
2
27.01.2020, 20:48
  • 1
    , что является, который, как предполагают, сделал: {!p} ? –  glenn jackman 02.04.2012, 16:04
  • 2
    я протестировал это, но это, кажется, ничего не делает. интересный –  Questioner 02.04.2012, 18:57
  • 3
    должны быть простофилей'! p {} / <! - STARTREPLACE1-> / {печатают "Совершенно новый мир!"; p=1} / <! - ENDREPLACE1-> / {p=0}', но это работает на меня с обоими синтаксисами. Dave, что делает Вас, имеет в виду, ничего не делает? Какую awk версию Вы используете? –  Eran Ben-Natan 04.04.2012, 07:47

Теги

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