0

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

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

当我运行脚本时,它说有一个错误,fi但我无法弄清楚。我也意识到这将返回类似ifand的语句,while但这对我的需求来说很好。

给定样本输入

use CGI;

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

这应该是输出

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

2 回答 2

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 也会删除这些行。

于 2013-06-28T16:59:19.747 回答
2

您有问题的原因是您的if语句需要一个then. 您还需要更多空格并引用您的变量。不过,它仍然行不通。您的比较也是错误的 - 这不是[比较字符串的方式。您可以改用 bash [[

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

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

grep -v ';$' $1
于 2013-06-28T17:00:09.590 回答