Описание тега sox
Это потому, что ты нужна оболочка для создания трубы или выполнить перенаправление. Обратите внимание, что кошка
- это команда для сцепления, вряд ли имеет смысл использовать его только для одного файла.
кошка file1.txt | команды xargs -я{} Ш-с 'котом file2.txt | грэп -Е "$1"' ш {}
Делать не делать:
кошка file1.txt | команды xargs -я{} Ш-с 'котом file2.txt | грэп -е {}'
а что будет означать уязвимость введения команд. В {}
будут расширены в коде аргумента Ш.
так интерпретируется как шелл-кода. Например, если одна линия file1.txt
был $(перезагрузка)
что бы вызвать перезагрузку
.
К -э
(или вы можете также использовать --
) тоже важно. Без этого, вы бы проблемы с регэкспы, начиная с -
.
Вы можете упростить, используя редиректы вместо кота
:
< file1.txt команды xargs -я{} Ш-с '< file2.txt грэп -Е "$1"' ш {}
Или просто передать имя файла как аргумент команды grep
, а не через редиректы в этом случае вы можете даже отказаться от ВГ
:
< file1.txt команды xargs -я{} грэп -е {} file2.txt
Вы могли бы также сказать грэп
, чтобы искать все регэкспы сразу в одном вызове:
грэп -Ф file1.txt file2.txt
Заметим, однако, что в этом случае, это только одно выражение для каждой строки file1.txt
здесь нет специального цитата обработку, выполненную команды xargs
.
размер
по умолчанию считает ее ввода в список пустой (с некоторыми реализациями только место и разделе, по другим в [:пробел:]
класс персонажа текущего языкового стандарта) или строку слов, разделенных для которых обратная косая черта и одинарные и двойные кавычки могут быть использованы, чтобы избежать сепараторы (перевод строки может только быть экранированы обратной косой черты, хотя) или друг с другом.
Например, на входе как:
'"б'\" бар "баз" х\
г
команды xargs
без -Я{}
будет проходить "б"
, бар баз
и Х<перевод строки>у
команды.
С -Я{}
, команды xargs
получает по одному слову в строке, но все еще делает некоторую дополнительную обработку. Он игнорирует ведущим (но не торможу) заготовок. Заготовки уже не рассматриваются в качестве разделителей, но обработка цитату все-таки делается.
На входе выше команды xargs -я{}
будет проходить один "б" Foo бар х<перевод строки>й
аргумент команды. Также отметим, что одной из многих систем, как это требуется в POSIX, что не будет работать, если слова более 255 символов. В целом, команды xargs -я{}
это довольно бесполезно.
Если вы хотите, чтобы каждая линия должны быть переданы дословно, как аргумент команды вы могли бы использовать GNU команды xargs
-D 'В\Н'
расширение:
< file1.txt команды xargs -D 'В\Н' -Н 1 грэп file2.txt -э
(здесь полагаюсь на очередное продление лицензии GNU grep в
, что позволяет передавать параметры через аргументы (при условии, POSIXly правильно будет не в среду) или портабельно:
СЭД "ы/'/'\\\\\\"/г;с/.*/'&'/" file1.txt | команды xargs -N1 и ш-с '
для линии делать
грэп -е "$строка" file2.txt
сделано Кайминьш
Если вы хотели каждое слово в file1.txt
(цитаты по-прежнему признаются), а не в каждой строке , чтобы быть искали (что бы обойти свой пробел проблемой, если у вас по одному слову в строке в любом случае), вы можете использовать команды xargs -N1 в
одиночку вместо того, чтобы использовать -я
:
< file1.txt команды xargs -N1 и ш-с '
за слова
грэп -е "$слово" file2.txt
сделано Кайминьш
Для прокладки начальные и конечные пробелы (но без цитаты обработки, что команды xargs
), вы могли бы сделать:
сбросить МФС # восстановление разбиение его по умолчанию
пока читала-Р выражения; делать
грэп -е "$регулярное выражение" file2.txt
сделано < file1.txt