Как получить строки, которые содержат-R с grep

Как другие отметили, если это - динамическое веб-приложение, Вы - очень более обеспеченные функции PHP's использования для доступа к размеру файла.

Но если Вы собираетесь добраться, это путем выполнения команды оболочки, не использовать ls. Вместо этого используйте stat, и скажите это точно, что Вы хотите:

$ stat -c '%n %s' x.txt
x.txt 12

3
26.06.2013, 00:27
5 ответов

Попытка:

grep -- -R *.GNU

-- указывает на конец опций так, чтобы -R рассматривается как аргумент вместо опции к grep

8
27.01.2020, 21:07

Изрядное количество инструментов GNU поддерживает опцию, где можно сказать инструмент (rm, grep, ls, и т.д.), что Вы больше не хотите, чтобы это продолжило анализировать для параметров командной строки к себе. Эта опция упрощена путем маркировки входа командной строки с двойным тире --.

Можно читать больше об этом в GNU CoreUtils FAQ. Конкретно этот раздел, названный: 11, Как я удаляю файлы, которые запускаются с тире.

Это допускает файлы, которые начинаются с тире (т.е. -) быть переданным как параметры командной строки:

примеры

rm ./-stuff
rm /full/path/-stuff
rm -- -stuff

mv ./-stuff differentstuff
mv -- -stuff differentstuff
4
27.01.2020, 21:07
  • 1
    Это не конкретный GNU все же. Это - POSIX. Это не все инструменты (см., например, test или echo). Также отметьте это с find, -- мешает именам файлов быть взятым в качестве опций, но не от того, чтобы быть взятым в качестве предикатов. –  Stéphane Chazelas 26.06.2013, 01:07
  • 2
    @StephaneChazelas - Да я боялся, когда я заявил все, что я преувеличивал его, но я полагаю, что это больше всего, или по крайней мере все, что использует coreutils пакет. Если я выполняю следующую команду под Fedora, rpm -q --whatrequires coreutils -l Я получаю список всех файлов, которые требуют его, и это - довольно большой блок инструментов GNU от того, что я могу сказать. Спасибо за разъяснение по поводу find, еще одна вещь я не знал 8-). уверенный –  slm♦ 26.06.2013, 03:43

Наиболее распространенные способы

grep -- -R *.GNU работы с некоторыми вариантами grep. -- говорит grep прекращать искать флаги.

grep -e -R *.GNU работы также. -e говорит grep, что шаблон поиска следует.

Альтернативы

grep '[-]R' *.GNU

[-] класс символов. С тех пор существует только один символ в классе, он должен соответствовать дефису (-).

grep '.\?-R' *.GNU

Вопросительный знак говорит grep, что символ до него является дополнительным. . соответствия любой символ.

grep '\(\)-R' *.GNU

Круглая скобка делает пустую группу.

3
27.01.2020, 21:07
  • 1
    +1 для ободрительной креативности. Существует больше чем один способ сделать это! –  ruakh 26.06.2013, 08:52
grep -e -R ./*.GNU

другая возможность.

3
27.01.2020, 21:07
  • 1
    @stephane, но это - отдельный вопрос. –  Kevin 26.06.2013, 04:21

Попытайтесь выйти из тире как

grep "\-R" *.GNU
0
27.01.2020, 21:07
  • 1
    Технически, который работает пока \- не распознан как расширенный regexp оператор Вашим grep реализация. Обратная косая черта не выходит - что касается regexp (ни один - ни \- являются особенными, таким образом, обратная косая черта проигнорирована), но потому что теперь первый аргумент grep не запускается с a -, это выходит - в том смысле, что это больше не заставляет аргумент быть взятым в качестве опции. grep '[-]R' или grep '\(-R\)' также работал бы. Вам все еще был бы нужен a -- с GNU grep, если некоторые имена файлов могут запуститься с -. –  Stéphane Chazelas 26.06.2013, 01:22

Теги

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