Как к grep рекурсивному UNIX дерево заканчивается наряду с каждым древовидным узлом?

Если StringB и StringA не может появиться на той же входной строке, затем можно сказать sed выполнять замену один путь и только пробовать другой путь, если не было никаких случаев первой искавшей строки.

<file.txt sed -e 's/StringA/StringB/g' -e t -e 's/StringB/StringA/g'

В общем случае я не думаю, что в sed существует легкий метод. Между прочим, обратите внимание, что спецификация неоднозначна если StringA и StringB может наложиться. Вот решение для Perl, которое заменяет крайнее левое возникновение любой строки и повторения.

<file.txt perl -pe 'BEGIN {%r = ("StringA" => "StringB", "StringB" => "StringA")}
                    s/(StringA|StringB)/$r{$1}/ge'

Если Вы хотите придерживаться инструментов POSIX, awk является способом пойти. Awk не имеет примитива для общих параметрических замен, таким образом, Вам нужно к самокрутке.

<file.txt awk '{
    while (match($0, /StringA|StringB/)) {
        printf "%s", substr($0, 1, RSTART-1);
        $0 = substr($0, RSTART);
        printf "%s", /^StringA/ ? "StringB" : "StringA";
        $0 = substr($0, 1+RLENGTH)
    }
    print
}'
3
20.03.2017, 12:18
3 ответа

Найти исполняемые файлы названными java в соответствии с указанным каталогом:

find '/Applications/NetBeans/NetBeans 7.0.app/' -name java -type f -perm -u+x

Вывод будет одним именем файла на строку, например.

/Applications/NetBeans/NetBeans 7.0.app/Contents/Resources/NetBeans/ExecutableJavaEnv/java

Если Вы хотите опустить …/NetBeans 7.0.app часть, сначала переключитесь на каталог и работайте find на текущем каталоге (.). Все еще будет a ./ префикс.

cd '/Applications/NetBeans/NetBeans 7.0.app/'
find . -name java -type f -perm -u+x

Строго говоря, -perm u+x выбирает все файлы, которые являются исполняемым файлом их владельцем, не всеми файлами, которые можно выполнить. GNU находит, имеет a -executable опция искать файлы, которые Вы имеете, выполняет разрешение на, принимая во внимание все режимы файла и ACLs, но эта опция не доступна в других системах, таких как OSX. На практике это вряд ли будет иметь значение; на самом деле для Вашего варианта использования можно забыть о полномочиях в целом и просто соответствовать -name java -type f.

-type f выбирает только регулярные файлы, не каталоги или символьные ссылки. Если Вы хотите включать символьные ссылки на регулярные файлы в поиске, добавьте -L опция к find (сразу после find команда, перед названием каталога для поиска).

5
27.01.2020, 21:13

Я думаю, что это - то, что Вы хотите:

find /Applications/NetBeans/NetBeans\ 7.0.app -type f -executable -name java
2
27.01.2020, 21:13
  • 1
    да с типом и исполняемыми проверками, это - лучший –  rvs 23.07.2011, 15:09
  • 2
    @alex, почему это не работает?:-/ . find /Applications/NetBeans/NetBeans\ 7.0.app -type f -executable -name java find: -executable: unknown option Я должен изменить опции после того, как найдут? Но это - все еще ошибка. –  Arie 23.07.2011, 15:17
  • 3
    @ArieKeren -executable характерно для GNU, находят. В Вашем случае просто пропустите его. –  Gilles 'SO- stop being evil' 23.07.2011, 15:33

Кажется, что это может быть, легко покончили, найдите: find /path/ -name java. (Почему Вы не попробовали).

0
27.01.2020, 21:13
  • 1
    я попробовал это, но это не работало. Это дало мне, dir назвал Java, не файл. –  Arie 23.07.2011, 15:20

Теги

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