Bash shell中的分隔符不正确
我试图迭代bash脚本的几行,并回显所有非注释行 在我的循环中,我有以下命令:Bash shell中的分隔符不正确,bash,Bash,我试图迭代bash脚本的几行,并回显所有非注释行 在我的循环中,我有以下命令: echo $line | cut -d" #" -f1 但是,解释器向我抛出以下错误: cut: bad delimiter 我做错了什么?您可以使用awk: awk '$1 !~ /^#/' file 仅打印第一个字段中不以#开头的行 如果要测试字符串是否为注释: if [[ ! $(awk '$1 !~ /^#/' <<<"$string") ]]; then echo "'$st
echo $line | cut -d" #" -f1
但是,解释器向我抛出以下错误:
cut: bad delimiter
我做错了什么?您可以使用
awk
:
awk '$1 !~ /^#/' file
仅打印第一个字段中不以#
开头的行
如果要测试字符串是否为注释:
if [[ ! $(awk '$1 !~ /^#/' <<<"$string") ]]; then
echo "'$string' is a comment"
else
echo "'$string' is not a comment"
fi
如注释中所述,
-d
参数到cut
只需要一个字符。尝试使用nawk
代替您的示例:
echo $line | nawk 'BEGIN {FS=" #" } ; { print $1 }'
或者只打印不以“#”开头的行,请使用grep
:
grep -v " #" <file>
grep-v“#”
或者只打印以散列开头的行,或者只打印空格和散列,我将使用Perl:
perl -n -e 'unless (/(\S+)*#/) {print}' <file>
perl-n-e'除非(/(\S+)*#/){print}'
为了完整起见,请使用sed
:
sed '/^\S*#/d' file
这本质上是说,输出所有不以任何空格开头并后跟
的行。这是一个现代版本的sed
,因此旧版本的sed可能需要使用其他内容来进行空格匹配。可能重复的-d
选项似乎只允许使用一个字符作为分隔符。不清楚-d”#“
要做什么#
在bash中引入了一条注释,但前面不必加空格。@KeithThompson:实际上,大多数情况下都需要加空格。“以#开头的单词会导致忽略该单词和该行上的所有剩余字符。”因此(#这是一条注释
——因为(
是自定界的,但。[#这不是注释
(当然,#前面有空格这一事实并不能证明它是注释。它可以在引用的单词中。)使用nawk
而不是awk
的任何特殊原因?如果行以
或制表符开头怎么办?@Keith在我的Solaris 10系统上,awk没有产生所需的输出。nawk产生了。OP没有指定他们正在使用的系统。@John-同意,但从OP给出的示例来看,他们的行似乎以一个空格后跟一个散列。但是我会改变我的答案,也给这个选项。@Warwick:这一点很好——但我认为Solaris的默认版本仍然是非常旧的awk
。
sed '/^\S*#/d' file