2013-12-10 3 views
3

Учитывая два примера sed.В чем смысл {} ; in find -exec sed

sed -i 's/ugly/beautiful/g' /home/bruno/old-friends/sue.txt 

Это легко понять.

Но это:

$ find /home/bruno/old-friends -type f -exec sed -i 's/ugly/beautiful/g' {} \; 

Почему {} \; важно во втором? Какое значение и значение этого? Я предполагаю `; ' для -exec. Но почему это должно сбежать и что означают фигурные скобки? Могут ли они быть похожими на область действия C?

ответ

7

Это не на самом деле для sed, это для find. Эта строка сообщает find, чтобы найти соответствующие файлы, и, когда она их найдет, выполните sed. {} - это то, где имя файла будет в командной строке sed, а \; отмечает конец командной строки sed. (В теории можно затем продолжить с другими find действиями, они бы только в том случае, если sed вернулся 0.)

Так что если find находит файл /home/foo/bar, то sed командная строка будет

sed -i 's/ugly/beautiful/g' /home/foo/bar
+0

Спасибо и сделать вас знать причину, по которой мы избегаем ';'? Интересный выбор {} для подстановки имени файла. –

+2

@SenthilKumaran: Нам нужно скрыться ';', потому что в большинстве оболочек ';' используется для разделения команд. (Например, попробуйте 'echo" a "; echo" b "' в вашей оболочке.) Поэтому, если мы не избежим этого, это не будет аргументом для 'find', это будет конец этой команды и начало следующего, на уровне оболочки. –

+0

Спасибо! Я не думал о необходимости оболочки. Теперь это имеет смысл. –

Смежные вопросы