【问题标题】:Using printf to display an extracted string through grep and to be use as user input in a script使用 printf 通过 grep 显示提取的字符串并用作脚本中的用户输入
【发布时间】:2017-01-29 06:07:52
【问题描述】:

早安,

这有点长,我希望任何可以在这个简单问题上支持我的人(对其他人)提供帮助,但几乎永远带我去弄清楚。 我有这个文件 (EOL.txt),其中包含以下示例列表:

   35 - 5976

   36 - 5976C0

   53 - 5976C2

   64 - 5976D0

   69 - 43593

   72 - 43593C0

我使用以下命令提取最左边的数字,因为这对应于另一个脚本的例程编号:

grep 5976C2 EOL.txt | head -n1 | cut -d- -f1

在我获得该数字后,我会将其与其他数据一起输入另一个脚本(N.csh-syntax 如下),该脚本将执行另一个(Test.csh):

$./N.csh 53 XXXX.XX "01 02 03"

N.csh --> printf "$1\n$2\n$3\nYYYY\n1\nN\n" | /export/home/Script/Test.csh

我现在要做的是将 grep 命令合并到 N.csh 中,这样我就不必单独执行此操作了。它应该是这样的:

$./N.csh 5976C2 XXXX.XX "01 02 03"

我尝试了以下命令,但它不起作用。

grep $1 EOL.txt | head -n1 | cut -d- -f1 >> A ; set B=`cat A` ; printf %s "$B\n$2\n$3\n82869\n1\nN\n"

我是这个东西的新手,任何帮助将不胜感激。

提前非常感谢。 迈克

【问题讨论】:

    标签: linux shell unix grep printf


    【解决方案1】:

    您可以在文件 N.csh 中使用以下内容:

    set mynumber = `grep $1 EOL.txt | head -n1 | cut -d- -f1`
    printf "$mynumber\n$2\n$3\n...
    

    然后像调用 N.csh ./N.csh 5976C2 XXXX.XX "01 02 03"

    请注意,在set mynumber = 之后,第一行有一个“反引号” - 一个反向单引号。 shell 执行由两个反引号分隔的命令,获取输出,并将其放回原来的位置,所以第一行变成了set mynumber = 53。

    【讨论】:

    • 嗨 linuxfan,感谢您检查这个.. 我尝试了您的解决方案,但它没有显示 mynumber 的值:
    • @Mike 你是不是剪切了粘贴?有一个错字 mynumber->mynumver... 我刚才编辑了。另外,在“set mynumber”之后添加一个“echo $mynumber”,以检查发生了什么。
    • 是的,我看到了那个错字并更正了它,但仍然没有显示任何值。我使用 printf 来显示 mynumber 的值
    • 将#!/bin/csh 作为文件的第一行!一切正常,但正如你所说,运行 N.csh 时没有。因为脚本是用bash执行的!
    • 我删除了 set 命令,而是使用了 A=grep $1 EOL.txt | head -n1 | cut -d- -f1 printf "$A\n$2\n$3\n82869\n1\nN\n" 并显示了我列出的输入但是当我将它放到 Test.csh 中,它现在提示语法错误。不确定 $A 是否真的作为输入传递给脚本
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-21
    • 2020-12-04
    • 2010-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多