我可以将长链sed命令组合成更短的东西吗?

问题描述:

我成功地写了一条很适合我使用的长行。 它得到一个文件,并将文本格式化为我想要的。我可以将长链sed命令组合成更短的东西吗?

是否可以缩短?

wget http://user:[email protected]/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 
+0

在* *至少给我们可读格式的礼貌。 –

+0

(“可读格式”,我不是说反引号 - 我的意思是换行和缩进)。 –

+0

所以,首先 - 你意识到你可以给'sed'多个命令,对吧? –

一个良好的开端将是学习pipe command (|)如何可以用来输出从一个程序通过输入下一个 - 这将消除需要创造,参考并清理所有的中间文件( step1 .. step10)从您的命令行。

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

如果,虽然不太可能,你总是使用相同的文件,只是做一个别名给予一个名称命令链,例如:

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

然后添加上述到〜/代码。 bash_rc使其永久保存在您的用户帐户中。

你想要这个我觉得

wget -O- http://user:[email protected]/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