从文件中获取不以分号结尾的行

时间:2013-06-28 16:55:59

标签: bash scripting

我正在尝试检查代码的结尾,因为它们导致我运行的服务器出现了一些问题。要做到这一点,我使用bash脚本(因为我更熟悉bash)来读取行并返回那些不以分号结尾的行。我的bash脚本如下

while read line
do
if[$line!=*;]
echo $line
fi
done < $1

当我运行脚本时,它表示fi出现了错误,但我无法弄明白。我也意识到这会返回ifwhile这样的陈述,但这样可以满足我的需求。

给出样本输入

use CGI;

print "<html>"
print "<head>";
print "</head>";
print "<body><p> HELLO WORLD </p>";
print "</body>";
print "</html>"

这应该是输出

print "<html>"
print "</html>"

2 个答案:

答案 0 :(得分:2)

我认为最简单的方法是使用grep。给定input.txt这样的文件:

spam
foo;<Space><Space>
sausage
baked;<Tab>
beans
unladen;

你可以做到

grep -v ';\s*$' input.txt

并获得

spam
sausage
beans

grep的-v标志表示“返回与此正则表达式不匹配的所有行”,因此它将跳过以分号结尾的所有行。

如果您的行在分号后面也有空格,\s*表示“任何空格字符序列”,所以grep也会删除这些行。

答案 1 :(得分:2)

您遇到问题的原因是您的if声明需要then。您还需要更多空格并引用您的变量。但它仍然行不通。你的比较也是错误的 - 这不是[比较字符串的方式。您可以改为使用bash的[[

while read line
do
  if [[ "$line" != *\; ]]
  then
    echo "$line"
  fi
done < $1

但即便如此,你真正应该做的是:

grep -v ';$' $1