Text-Processing

“awk”是否有像“sed -e”這樣的選項?

  • August 26, 2022

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

考慮一個例子,你有一個長長的sedcmds列表,它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

引用自:https://unix.stackexchange.com/questions/714915