Intereting Posts
Заменить строку 1 только при наличии строки 2, 3 или 4 Эти команды выглядят злонамеренными? Как рассчитывается номер временной метки в / etc / shadow? Восстановление случайно удаленных файлов, блочное устройство В чем разница между запуском команды напрямую и с помощью `bash -c`? Как я могу установить dvsdk Texas Instruments? Изменение цвета в консоли / виртуальном терминале Как зафиксировать измененный файл, если он ранее не был заблокирован RCS (и я использую режим Emacs VC)? Почему вы не можете использовать Tab в файле sed -i "1i \ t 'word'? Отображение отдельных значений списка и количества вхождений Самый используемый язык для Debian Остановка постфикса – сообщения помещаются в очередь, когда постфикс простаивает? Как взять и восстановить резервное копирование с помощью ленточного накопителя LTO в RedHat? Как создать фальшивый файл устройства, который принимает входные данные из программы C? регулярное выражение для извлечения информации в сценарии оболочки

grep дает результаты, которые не отображаются в исходном контексте

Я новичок в Unix, и я уже сталкивался с чем-то, что случается очень часто.

Я ps -eo 'tty,pid,comm' команду (например, ps -eo 'tty,pid,comm' ) и возвращает текст. Насколько я понимаю, когда я передаю результат в grep он должен искать результат и возвращать результаты этого вывода.

Итак, почему же я возвращаю результат, который не похож на команду ps ? Я возвращаю длинный текст, который даже не в форме исходной команды ps и состоит из неясной информации и выглядит как файл настроек.

На основе вашего комментария видно, что вывод, который вы видите, – это содержимое файлов с одним символьным именем файла, которое соответствует имени первого из таких файлов. Причина в том, что ? символ в вашей команде grep расширяется оболочкой перед выполнением.

Таким образом, ваша команда ps делает то, что должна, но grep полностью игнорирует этот вход, предпочитая grepping файлы в командной строке.

Продемонстрируйте это для себя, сделав что-то вроде:

 mkdir ~/tempdir cd ~/tempdir ps -eo 'tty,pid,comm' | grep ? 

который создаст пустой каталог (в нем нет файлов), который затем позволит ? чтобы не расшириться и перейти непосредственно к grep. Затем создайте два файла:

 touch a echo thisisfilebwithana > b 

а затем повторно запустить только grep, вот так:

 grep ? 

и вы увидите

 thisisfilebwithana 

потому что grep увидел это:

 grep ab 

который он интерпретирует как «показать мне все строки из файла b, содержащие« a ».

Вместо этого вы, скорее всего, захотите сделать это, чтобы избежать вопросительного знака:

 ps -eo 'tty,pid,comm' | grep \? 

или

 ps -eo 'tty,pid,comm' | grep '?'