某些制表符在 shell 脚本中不匹配,但在命令行上匹配
CERTAIN tab characters don't match in shell scripts, but do on command-line
我正在尝试对 shell 脚本中 xinput
命令的输出进行一些简单的解析。我正在尝试做的事情在命令行上完美运行,但在脚本中不起作用。
这是我的命令行:
xinput list | awk '/Name of my Device id[0-9]* \[slave pointer/'
上一条命令的输出:
⎜ ↳ Name of my Device id=12 [slave pointer (2)]
出现提示时,我通过按 CTRL-V,TAB 输入制表符。在脚本中,我输入了一行:
xinput list | awk '/Name of my Device id[0-9]*/'
其中returns三行数据。只要我添加另一个标签,就像这样:
xinput list | awk '/Name of my Device id[0-9]* /'
我不再得到任何输出。我尝试了 CTRL-V,TAB 和 TAB。我也尝试过从头开始手动输入整个脚本行,以防某处出现不可打印的内容。为什么 awk
能够处理第一个选项卡,但不能处理第二个?顺便说一句,我已经用 dash、bash 和 zsh 试过了。行为是相同的。
非常感谢。
P.S。我忘了说我的编辑是 vim.
P.P.S
xinput list | awk '/Name of my Device id[0-9]* \[slave pointer/' |
sed 'y/ \t/_$/'
输出:
⎜___↳_Name_of_my_Device$id=12$[slave__pointer__(2)]
事实证明,额外的选项卡有点转移注意力。确实是模式中缺少 =
导致了问题:
xinput list | awk '/Name of my Device id=[0-9]* /'
是更正后的版本。
没有 <tab>
并且没有 =
它可以工作,因为 id[0-9]*
匹配 id
后跟 零个或多个 数字,因此 =
的存在不会终止匹配。但是,一旦您添加 <tab>
,=
就会妨碍您。
运行
echo ' ↳ Name of my Device id=12 [slave pointer (2)]' | awk '{sub(/Name of my Device id[0-9]*/, "XXX"); print}'
将说明当 =
和 <tab>
都缺失时匹配的内容。
我正在尝试对 shell 脚本中 xinput
命令的输出进行一些简单的解析。我正在尝试做的事情在命令行上完美运行,但在脚本中不起作用。
这是我的命令行:
xinput list | awk '/Name of my Device id[0-9]* \[slave pointer/'
上一条命令的输出:
⎜ ↳ Name of my Device id=12 [slave pointer (2)]
出现提示时,我通过按 CTRL-V,TAB 输入制表符。在脚本中,我输入了一行:
xinput list | awk '/Name of my Device id[0-9]*/'
其中returns三行数据。只要我添加另一个标签,就像这样:
xinput list | awk '/Name of my Device id[0-9]* /'
我不再得到任何输出。我尝试了 CTRL-V,TAB 和 TAB。我也尝试过从头开始手动输入整个脚本行,以防某处出现不可打印的内容。为什么 awk
能够处理第一个选项卡,但不能处理第二个?顺便说一句,我已经用 dash、bash 和 zsh 试过了。行为是相同的。
非常感谢。
P.S。我忘了说我的编辑是 vim.
P.P.S
xinput list | awk '/Name of my Device id[0-9]* \[slave pointer/' |
sed 'y/ \t/_$/'
输出:
⎜___↳_Name_of_my_Device$id=12$[slave__pointer__(2)]
事实证明,额外的选项卡有点转移注意力。确实是模式中缺少 =
导致了问题:
xinput list | awk '/Name of my Device id=[0-9]* /'
是更正后的版本。
没有 <tab>
并且没有 =
它可以工作,因为 id[0-9]*
匹配 id
后跟 零个或多个 数字,因此 =
的存在不会终止匹配。但是,一旦您添加 <tab>
,=
就会妨碍您。
运行
echo ' ↳ Name of my Device id=12 [slave pointer (2)]' | awk '{sub(/Name of my Device id[0-9]*/, "XXX"); print}'
将说明当 =
和 <tab>
都缺失时匹配的内容。