如何忽略被重定向的特定线路

如何忽略被重定向的特定线路

我有一个程序,可以通过重定向从输入文件中向其提供一些指令来运行该程序。我的输入文件如下所示:

alpha
5
2
run
7
quit

现在,我像这样运行它:

myprogram < input_file

但是,有时我需要在输入文件中添加一些注释以使其清楚,例如

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

不幸的是,现在我无法将其重定向到程序,因为它不会忽略以#

在将其重定向到之前如何忽略这些注释行myprgram

答案1

您可以使用grep过滤掉以“#”开头的行:

grep -v '^#' input_file | myprogram

传递给的字符串grep是正则表达式。它匹配行 ( ) 的开头,^后跟#-v反转逻辑,以便显示与此模式不匹配的行。

一般来说,如果我想修改行内的数据,我会选择grep简单地显示/丢弃整行。sed当然,该sed解决方案也有效。

答案2

在将其提供给程序之前,使用 sed 过滤掉带有注释的行。您可以选择其中一种形式(但并非所有 shell 都支持第二种形式,即进程替换):

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

/^#/是匹配以 开头的任何行的正则表达式#d是从输出中删除这些行的命令。 (不用担心,input_file不会被修改sed)。

相关内容