Сед, чтобы исключить каталоги - PullRequest
8 голосов
/ 04 ноября 2010

Я пытаюсь заменить сразу несколько файлов на sed, используя * в качестве имени файла. Однако он также пытается обработать каталоги, выдает ошибку и завершает работу. Есть ли простой способ преодолеть это?

Ответы [ 2 ]

10 голосов
/ 04 ноября 2010

Я точно не знаю, как вы используете sed здесь, но обычный способ обработки только обычных файлов в UNIX - это команда find, что-то вроде:

find . -type f -exec sed 's/Hello/Goodbye/g' {} ';'

Тип ограничивает вас обычными файлами, а не каталогами или FIFO или любым другим видом магии файловой системы.

Если вы запустите man find в своей системе, вы увидите множество других опций, которые выможно использовать.

0 голосов
/ 10 мая 2018

Чтобы перейти на ответ Паксдиабло , я собрал этот псевдоним и добавил его в псевдонимы bash как 'recursive sed': rsed:

rsed() {
  [[ -z $2 ]] && echo "usage: ${FUNCNAME[0]} oldtext newtext" && return
  command find . -type f -exec sed -i "s/${1}/${2}/g" {} \;
}

Результат:

> cat test/file
Hello how are you?
> rsed "Hello how are you?" "Fine thanks"
> cat test/file
Fine thanks
...