Text-Processing
“awk”是否有像“sed -e”這樣的選項?
sed -e
您可以多次呼叫 sed 而無需使用多個管道。使用
sed
多個管道echo "'text';" | \ sed s"#';##"g | \ sed s"#'##"g | text
使用
sed -e
echo "'text';" | \ sed \ -e s"#';##"g -e s"#'##"g text
考慮一個例子,你有一個長長的
sed
cmds列表,它sed -e
更容易讀寫。有這樣的選擇
awk
嗎?
如果你有一個花哨的 GNU
awk
,那麼是的% printf abc'\n' | gawk -e '{print}' -e '{print}' abc abc
否則,可能,不。
% printf abc'\n' | awk -e '{print}' -e '{print}' awk: unknown option -e ignored awk: can't open file -e source line number 1
使用諸如 ZSH 之類的精美 shell,您可以執行以下可怕的操作,但此時您可能應該將腳本放入適當的文件中並執行它。
% print -l abc | awk -f <(print "{print}") -f <(print "{print}") abc abc
**框架挑戰:**有必要嗎?
在
awk
中,您可以根據需要在同一程序中重複任何修改命令,如echo "'text';" | awk '{gsub(/\047;/,""); gsub(/\047/,"")} 1'
或者
echo "'text';" | awk '{gsub(/\047;/,"")} {gsub(/\047/,"")} 1'
(
\047
用於在單引號程序中表示單引號)。你也可以用一種易於閱讀的方式寫出來,比如
echo "'text';" |\ awk '{gsub(/\047;/,"")} \ {gsub(/\047/,"")} 1'
或作為專用程序:
echo "'text';" | awk -f multi-substitute.awk
multi-substitute.awk
看起來像#!/usr/bin/awk -f {gsub(/\047;/,"")} {gsub(/\047/,"")} 1