удар поддерживает массивы:
http://tldp.org/LDP/abs/html/arrays.html
ИЛИ
COUNT=0
for i in `ls *.txt`
do
COUNT=`expr $COUNT + 1`
mv "$i" "$COUNT-$i"
done
Это переименовало бы файлы a.txt b.txt c.txt к 1-a.txt 2-b.txt 3-c.txt.
Одинарные кавычки завершаются одинарными кавычками; все другие промежуточные символы сохраняются точно, как, включая обратные косые черты. Таким образом нет никакого способа встроить одинарную кавычку между одинарными кавычками. (Но можно закончить одинарные кавычки, выйти из одинарной кавычки и запустить новый набор одинарных кавычек, как в 'Single quotes aren'\''t ever really embedded in single quotes.'
)
Предложение: Избегайте find+xargs когда grep -r pattern .
может рекурсивно grep на текущем каталоге.
Ниже команд имеют эквивалентное поведение:
grep -rns "add_action('save_post'," .
grep -rns 'add_action('\'save_post\', .
Последняя команда интерпретируется как:
'add_action('
-> add_action(
\'
-> '
save_post
-> save_post
\'
-> '
,
-> ,
Связывая эти части, grep
команда получает аргумент add_action('save_post',
.
xargs
ожидает аргументы, заключенные в кавычки некоторым странным способом который find
не производит. Никогда не используйте xargs
в сочетании с find
, если Вы не знаете, что Ваши имена файлов не содержат \"'
или пробел.
Вместо использования xargs
, позволить find
непосредственно назовите программу, которую Вы хотите запустить.
find . -exec grep -ns 'add_action('\''save_post'\'',' {} +
С exec … {} +
, программа вызывается однажды для многих файлов сразу, как с xargs
. Некоторые более старые версии find
не поддерживать +
здесь ¹, затем необходимо использовать ;
вместо этого, который вызывает grep
однажды на файл.
Можно альтернативно использовать find … -print0 | xargs -0
, если Ваши утилиты поддерживают его ¹. -print0
опция говорит find
испускать имена, разделенные пустым байтом, и -0
говорит xargs
ожидать разделенный от пустого указателя вход а не сделать любую интерпретацию кавычки.
Отметьте заключение в кавычки выше: между одинарными кавычками все символы интерпретируются буквально, за исключением того, что '
показывает конец литеральной строки. Так '\''
эффективно способ поместить литеральную одинарную кавычку в единственно заключенной в кавычки строке; официально, это “'
закончите кавычку, \
литерал '
одинарная кавычка, '
начните кавычку”.
В особом случае grep
, если Ваша поддержка внедрения это ¹, можно обойтись без find
и используйте grep -r
искать в каталоге рекурсивно:
grep -r 'add_action('\''save_post'\'',' .
¹ Linux, Cygwin, FreeBSD и OSX поддерживают эти функции.
-print0
и -0
, Я посмотрел на эти опции прежде, но никогда не понимал их достаточно хорошо для фактического получения результатов, в которых я нуждался. Я буду использовать grep -rns
с этого времени.
– Matthew
04.04.2012, 12:23
grep "add_action('save_post'," ./* -R
Вы можете grep все файлы в текущем каталоге рекурсивно с -R
опция.
Строка поиска может быть окружена "
.