Io-Redirection

如何忽略重定向的特定行

  • June 24, 2020

我有一個程序,我可以通過重定向從輸入文件中提供一些指令來執行它。我的輸入文件如下所示:

alpha
5
2
run
7
quit

現在,我像這樣執行它:

myprogram < input_file

但是,有時我需要在輸入文件中添加一些註釋以使其清楚,例如

# The name of value
alpha
# The acceleration
5
# The distance 
2
run
7
quit

不幸的是,現在我無法將它重定向到程序,因為它不會忽略以開頭的行#

在將其重定向到之前如何忽略這些註釋行myprgram

在將註釋提供給您的程序之前,使用 sed 過濾掉帶有註釋的行。您可以選擇其中一種形式(但並非所有 shell 都支持第二種形式,即程序替換):

sed '/^#/d' input_file | myprogram
myprogram < <(sed '/^#/d' input_file)

/^#/是匹配任何以 開頭的行的正則表達式#d是從輸出中刪除這些行的命令。(不用擔心,input_file不會被 修改sed)。

您可以使用grep過濾掉以“#”開頭的行:

grep -v '^#' input_file | myprogram

傳遞給的字元串grep是一個正則表達式。它匹配行的開頭 ( ^),後跟#. -v反轉邏輯,因此它顯示與此模式不匹配的行。

一般來說,如果我想修改行內的數據,我會選擇grep簡單地顯示/丟棄整行。sed但當然,該sed解決方案也有效。

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