【问题标题】:Execute a string after cut in terminal切入终端后执行字符串
【发布时间】:2018-05-10 06:58:41
【问题描述】:

我有一个文件 test.txt,其内容是:

ID="1002"Name="gltestDmesg":Command="dmesg":

我想运行这样的命令:

cat test.txt | rev | cut -d'"' -f2 | rev | execute

代替execute,应该是这样一个命令,可以让dmesg在终端中运行。代替dmesg,它可以是可以在终端上运行的任何命令。 我试过 xargs 为:

cat test.txt | rev | cut -d'"' -f2 | rev | xargs

但它提供dmesg 作为输出,因为 xargs 中的默认程序是 echo

我尝试在几个链接中搜索,但都说使用cutsed 进行字符串操作,但之后没有执行。但是我了解了xargs,但这也行不通。

如果我遗漏了什么,也请发表评论。

谢谢!

Edit1:在test.txt中,可以有多行类似的语法,所以我也可以用grep代替cat

【问题讨论】:

    标签: string bash ubuntu terminal


    【解决方案1】:

    您可以只使用输出作为命令:

    $(rev test.txt | cut -d'"' -f2 | rev)
    

    用于此的旧形式(仍在工作,但您不能嵌套它):

    `rev test.txt | cut -d'"' -f2 | rev`
    

    或者,如果你必须使用管道,以下应该可以工作:

    rev test.txt | cut -d'"' -f2 | rev | sh
    

    【讨论】:

    • 在解决方案中可以从 cat test.txt | rev 缩短到 rev test.txt,因为 rev 也可以自己读取 Input_file。
    • @RavinderSingh13,cat 和 grep 可能更合适,因为文件可能包含相同语法的多行。
    • @Ac3_DeXt3R,我们可以使用awk 做任何事情。 grep 也可以自己读取任何文件,而无需使用 cat
    • @Ac3_DeXt3R,当然,现在请在我的帖子中查看我的编辑解决方案。
    【解决方案2】:

    以下内容可能对您有所帮助。

    awk -F"\"" '{print $(NF-1)}' Input_file | sh
    

    解决方案 2:awk 中使用 system 函数也可以帮助我们。

    awk -F"\"" '{system($(NF-1))}'  Input_file
    

    编辑: 要将多个文件传递给 awk,您可以使用类似 eg--> for .txt 文件 *.txt 代替上面的 Input_file。 或者,如果您有多个文件,那么您也可以像 Input_file1 Input_file2 ... 一样。

    【讨论】:

    • 您可以通过将-F"\"" 替换为-F\" 来简化您的解决方案
    猜你喜欢
    • 1970-01-01
    • 2018-02-18
    • 1970-01-01
    • 2012-01-30
    • 2014-11-04
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多