Bash
字元串操作並將其管道傳輸到 bash
我有一個文件,內容如下:
... packageEARTH { ... } packageMARS { ... } packageVENUS { ... } ...
所以我想做一個多步驟的過程。我想提取以“package”開頭的每個單詞。所以那將是:
packageEARTH packageMARS packageVENUS
然後在下一步中,我想將文本附加到每個單詞的前面和末尾,如下所示:
./builder makepackageEARTHMain ; ./builder makepackageMARSMain ; ./builder makepackageVENUSMain
這樣它就可以在 bash 中執行。
clean
最後一步是每 30 秒後添加一個命令makepackage
。所以最後它會變成:./builder makepackageEARTHMain ; ..x30.. ; ./builder cleancache ; ..x30.. ; ./builder cleancache
這裡
...x30...
表示 30 次 makepackage 命令最後將其通過管道傳輸到 bash,以便命令可以按順序執行。我對 awk 或 sed 不太熟悉,所以如果有人能幫助我了解如何解決這個問題,那將非常有幫助。
謝謝!
在每個 UNIX 機器上的任何 shell 中使用任何 awk:
$ cat tst.awk match($0,/package[[:alnum:]_]+/) { sep = (cnt++ ? " ; " : "") printf "%s./builder make%sMain", sep, substr($0,RSTART,RLENGTH) if ( !(cnt % 2) ) { printf "%s./builder cleancache", sep } } END { print "" } $ awk -f tst.awk file ./builder makepackageEARTHMain ; ./builder makepackageMARSMain ; ./builder cleancache ; ./builder makepackageVENUSMain
只需更改
2
為30
在cleancache
每 30 次而不是每 2 次包裝後列印聲明。
不需要 shell 來執行命令。您可以使用以下方式完成所有
perl
操作:perl -ne ' for (/\bpackage\w+\b/g) { system "./builder", "make${_}Main"; system "./builder", "cleancache" unless ++$n % 30 }' input-file