为什么“grep”会更改 swaymsg 输出中的文本格式?[关闭]

Why Does 'grep' Change Text Format in Swaymsg Output? [closed]

提问人:Abdelrahman Essawy 提问时间:10/4/2023 更新时间:10/4/2023 访问量:39

问:


这个问题似乎与帮助中心定义的范围内的编程无关。

上个月关闭。

我用于过滤输入设备信息,但我注意到它正在更改文本格式。swaymsg -t get_inputs | grepgrep

使用 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”完全保留文本的原样?

json 正则表达式 linux 文本 grep

评论

0赞 tink 10/4/2023
Swaymsg 知道管道和文件之间的区别。但这并不是真正的编程问题。投票决定迁移到超级用户

答:

1赞 choroba 10/4/2023 #1

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

0赞 Zak 10/4/2023 #2

swaymsg既是纯“文本”,又是 .它只是默认为纯文本,当是 .jsonstdouttty

man swaymsg

您可以使用以下命令强制纯文本输出-p

您可以使用以下命令强制输出json-r

当输出到文件或使用工具(例如解析单个组件)时,输出非常有用,在您的情况下,抓取或单独获取而不是必须输出......json > your_file.jsonjqjsonnametypeidentifierawk