某些选项卡字符在shell脚本中不匹配,但在命令行上执行
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了某些选项卡字符在shell脚本中不匹配,但在命令行上执行相关的知识,希望对你有一定的参考价值。
我正在尝试在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]*/'
返回三行数据。只要我添加另一个标签,就像这样:
xinput list | awk '/Name of my Device id[0-9]* /'
我不再获得任何输出。我尝试使用CTRL-V,TAB和TAB。我也试过从头开始手动输入整个脚本行,以防某处存在不可打印的情况。为什么awk
能够处理第一个标签,而不是第二个?顺便说一下,我用dash,bash和zsh尝试过这个。行为是一样的。
非常感谢你。
附:我忘了提到我的编辑是vim。
P.P.S
xinput list | awk '/Name of my Device id[0-9]* [slave pointer/' |
sed 'y/ /_$/'
输出:
⎜___↳_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脚本中不匹配,但在命令行上执行的主要内容,如果未能解决你的问题,请参考以下文章