0

実行中のサーバーで問題が発生しているため、セミコロンのコードの末尾をチェックしようとしています。これを行うために、bash スクリプトを使用して (bash に慣れているため)、行を読み、セミコロンで終わらない行を返します。私のbashスクリプトは次のとおりです

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

スクリプトを実行すると、エラーがあると表示されますが、わかりfiません。ifまた、これはandのようなステートメントを返すことも認識して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

問題があるのは、ifステートメントにthen. また、さらにスペースが必要で、変数を引用する必要があります。それでもうまくいきません。あなたの比較も間違っています - それは[文字列を比較する方法ではありません。[[代わりにbash を使用できます。

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

しかし、それでも、あなたが本当にすべきことは次のとおりです。

grep -v ';$' $1
于 2013-06-28T17:00:09.590 に答える
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 に答える