代码之家  ›  专栏  ›  技术社区  ›  Tripp Kinetics

某些制表符在shell脚本中不匹配,但在命令行中匹配

  •  0
  • Tripp Kinetics  · 技术社区  · 7 年前

    我正在尝试对 xinput shell脚本中的命令。我所要做的在命令行上完全有效,但在脚本中不起作用。

    这是我的命令行:

    xinput list | awk '/Name of my Device   id[0-9]*    \[slave pointer/'
    

    上一个命令的输出:

    ⎜   ↳ Name of my Device      id=12   [slave  pointer  (2)]
    

    当出现提示时,我按 Ctrl-V,制表符 . 当在脚本中时,我输入一行代码:

    xinput list | awk '/Name of my Device   id[0-9]*/'
    

    它返回三行数据。一旦我添加另一个选项卡,如:

    xinput list | awk '/Name of my Device   id[0-9]*    /'
    

    我不再得到任何输出。我两个都试过了 就这样 . 我还试着从头开始手动键入整个脚本行,以防在某个地方有不可打印的内容。为什么是 awk

    非常感谢你。

    另外,我忘了说我的编辑是维姆。

    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)]
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   jas    7 年前

    结果发现额外的费用有点小。真的是失踪了 = 在导致问题的模式中:

    xinput list | awk '/Name of my Device id=[0-9]* /'
    

    是正确的版本。

    没有 <tab> 而且没有 = 它起作用是因为 id[0-9]* 比赛 id 然后 零或更多 数字,所以 = 不会毁了比赛。一旦你添加了 <选项卡> 尽管如此, = 挡住了路。

    正在运行

    echo ' ↳ Name of my Device  id=12   [slave pointer (2)]' | awk '{sub(/Name of my Device id[0-9]*/, "XXX"); print}'
    

    将说明当 = <选项卡> 我们失踪了。