grep -v под запросом двойных кавычек

У нас есть часть кода, которая утверждает,

"diff file1 file2 | /usr/bin/grep -v "#" |  /usr/bin/grep ^\>  |  /usr/bin/awk '{print $3}' | /usr/bin/xargs mkdir"

Весь оператор заключен в двойные кавычки (это требование синтаксиса приложения). Когда приложение достигает этой стадии, оно выдает ошибку grep. Это утверждение хорошо работает в командной строке. Но через приложение выдает ошибку для grep.

Использование: grep [OPTION]... PATTERN [FILE]...

Попробуйте `grep --help'для получения дополнительной информации.

Так что не уверен, что это первый или второй grep, который является проблемой.

2 ответа

Решение

Похоже, проблема с двойными кавычками. Попробуйте изменить свой первый grep на /usr/bin/grep -v '#' и второй grep для /usr/bin/grep '^>'

Ты используешь grep -v ^> а также > означает "перенаправление".

Если вы, например, делаете:

grep ^>output

весь вывод будет сохранен в файле output,

Итак, что вам нужно сделать, это процитировать ^> так что это интерпретируется как шаблон, который вы ищете:

"diff file1 file2 | /usr/bin/grep -v "#" | /usr/bin/grep "^>" | /usr/bin/awk '{print $3}' | /usr/bin/xargs mkdir"
                                                         ^  ^

Кстати, отметьте все ваши greps можно уменьшить следующим образом:

diff file1 file2 | awk '/#/ || /^>/ {print $3}' | /usr/bin/xargs mkdir
                        ^^^ ^^ ^^^^
          either contains #  |   |
                             or starts with >
Другие вопросы по тегам