我可以将一长串sed命令组合成更短的命令吗?

时间:2017-09-24 21:45:54

标签: linux unix sed text-formatting

我成功地写了一条很适合我使用的长线。 它得到一个文件,并将文本格式化为我想要的。

可以缩短它吗?

wget http://user:password@192.168.1.100/details.cgx \
  && sed "s/value/\n/g" details.cgx >> step1 \
  && sed "s/text/</g" step1 >> step2 \
  && sed "s/id/</g" step2 >> step3 \
  && tr -d '<>/' < step3 >> step4 \
  && sed "s/formFanLevel/FanLevel/g" step4 >> step5 \
  && sed '123,155d' step5 >> step6 \
  && sed '79,120d' step6 >> step7 \
  && sed '57,66d' step7 >> step8 \
  && sed '47,48d' step8 >> step9 \
  && sed '37,44d' step9 >> step10 \
  && sed '13,26d' step10 >> VMCDF.txt \
  && rm step* && rm details.cgx

3 个答案:

答案 0 :(得分:1)

你想要这个:

wget -O- http://user:password@192.168.1.100/details.cgx | sed -E '
    s/value/\n/g
    s/text|id/</g
    s,<>/,,g
    s/form(FanLevel)/\1/g
' | sed '
    13,26d
    37,44d
    47,48d
    57,66d
    79,120d
    123,155d
' > VMCDF.txt

答案 1 :(得分:0)

一个好的开始是学习如何使用pipe command (|)将输出从一个程序作为输入传递给下一个 - 这将消除创建,引用和清理所有中间文件的需要(步骤1 ..步骤10)从您的命令行。

答案 2 :(得分:0)

您可以编写一个可以将同一命令链应用于任何文件的shell脚本,然后使用该脚本而不是键入所有这些行。

如果虽然不太可能,但您总是使用相同的文件,只需为命令链指定一个别名,例如:

    alias wgetsed='wget http://user:password@192.168.1.100/details.cgx \
    && sed "s/value/\n/g" details.cgx >> step1 \
    && sed "s/text/</g" step1 >> step2 \
    ...
    && rm step* && rm details.cgx'

然后,您将上面的代码添加到〜/ .bash_rc,以使其成为您的用户帐户的永久代码。