linux 为什么'grep'会改变Swaymsg输出中的文本格式?[已关闭]

xdnvmnnf  于 11个月前  发布在  Linux
关注(0)|答案(2)|浏览(98)

**已关闭。**此问题不符合Stack Overflow guidelines。它目前不接受回答。

这个问题似乎不是关于在help center定义的范围内编程。
12天前关闭
Improve this question
我正在使用swaymsg -t get_inputs | grep过滤输入设备信息,但我注意到grep正在改变文本格式。

使用grep:

$ swaymsg -t get_inputs | grep -i touch
    "identifier": "2:7:SynPS\/2_Synaptics_TouchPad",
    "name": "SynPS\/2 Synaptics TouchPad",
    "type": "touchpad",

没有grep:

$ swaymsg -t get_inputs

Input device: SynPS/2 Synaptics TouchPad
  Type: Touchpad
  Identifier: 2:7:SynPS/2_Synaptics_TouchPad
  Product ID: 7
  Vendor ID: 2
  Libinput Send Events: enabled

为什么会发生这种不寻常的行为,有没有一种方法可以让“grep”保持文本的原样?

gkl3eglg

gkl3eglg1#

改变输出的不是grep,而是swaymsg。它检测到输出不是终端,并切换到JSON输出。尝试指定--pretty选项。

t3irkdon

t3irkdon2#

swaymsg可以处理纯文本和json。它只是默认为纯文本时,stdout是一个tty

man swaymsg

您可以使用-p强制纯文本输出
您可以使用-r强制json输出
json输出在输出到文件> your_file.json或使用工具(如jq)解析单个json组件时非常有用,在您的情况下,单独抓取nametypeidentifier而不是awk输出非常简单。

相关问题