一般而言,給定可能的一些命令輸出,如下所示:
one two three four five
six seven eight
one nine five two
etc...
我想使用sedor cut(或可能其他不需要在 macOS 上額外安裝的命令)來洗掉one流開頭的第一個。只是第一行的第一個詞。所有其余的輸出應該不受影響(即one第三行應該保留在輸出中)。我怎樣才能做到這一點?(我看到的所有 SO 帖子都為每一行都這樣做,這不是我想要的。)
ssh附加背景關系:我需要通過需要運行遠程命令sudo。我的腳本從用戶那里收集密碼,然后將其回顯到ssh的標準輸入中,ssh 運行的命令是sudo -S. -S導致sudo從標準輸入讀取密碼,但它仍然將“密碼:”回顯到標準錯誤。為了不將用戶與第二個毫無意義的提示混淆,我想將其從 stderr 輸出中洗掉,但我確實想要 stderr 輸出的其余部分,以防sudo運行的命令生成 std??err 輸出。
uj5u.com熱心網友回復:
使用sed
$ sed 's/one \(.*\)/\1/;:a;n;ba' input_file
two three four five
six seven eight
one nine five two
etc...
uj5u.com熱心網友回復:
您可以撰寫sed僅適用于第一行的腳本。例如,
$ sed '1s/one //' tmp.txt
two three four five
six seven eight
one nine five two
etc...
該地址1表示該s命令不適用于除第 1 行之外的任何行。
uj5u.com熱心網友回復:
代碼
{m,g}awk 'NF<=NR || NF=NF' FS='^[ \t]*one[ \t] ' OFS= # if u prefer FS/OFS
or
{m,g}awk 'sub("^[ \t]*one[ \t] ",NR==!_?"":"&")_' # if u prefer sub()
輸出
two three four five
six seven eight
one nine five two
uj5u.com熱心網友回復:
使用awk和洗掉任何第一個單詞(由任意數量的空格分隔):
awk 'NR==1 {sub($1 " *", "")} {print}'
###editsub改用
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/483485.html
