Shell
如何從標準輸入中刪除第 n 個單詞?
對於給定的 N,我想創建一個腳本,從標準輸入中刪除第 N 個單詞。例如,對於這個輸入:
One two three four, five six seven eight, nine
如果我們要求刪除第 8 個單詞,它應該刪除
eight,
. 就我而言,單詞是任何非空格字元序列。One two three four, five six seven nine
是否有一些聰明的單線可以使用標準命令行實用程序來完成此任務?目前我有一個相當長的腳本來執行此操作,但感覺有點矯枉過正。
與
perl
:$ perl -pe 's/\S+/++$c == 8 ? "" : $&/ge' <your-file One two three four, five six seven nine
$ perl -pse 's/\S+/--$n ? $& : ""/ge' -- -n=8 <your-file One two three four, five six seven nine
s
或者在找到第 n個單詞後進行一些優化並且不執行替換:perl -pse 's/\S+/--$n ? $& : ""/ge if $n > 0' -- -n=8 <your-file
使用任何 awk 而無需一次將所有輸入讀入記憶體:
$ awk -v t=8 '{p=n; n+=NF} (n>t) && !f++{$(t-p)=""} 1' file One two three four, five six seven nine