2016-12-19 1 views
0

私はこの研究を私の研究で見る。このsedコマンドラインは何をしますか?

$temp = 'echo $line | sed s/[a-z AZ 0-9 _]//g' 
IF($temp != '') 
    echo "Line contains illegal characters" 

わかりません。 sedは関数を代用するようなものではないのですか?コードでは、[a-z AZ 0-9 _]を ''に置き換える必要があります。私は、$行に不正な文字があるかどうかを判断する方法を理解していません。

+0

すべての有効な文字が削除された場合(これは 'sed'と同じです)、結果が空でない場合、不正な文字が残っていることを意味します。 – kaylum

+0

それはどんなシェルですか? –

答えて

3

sedは、正規表現を適用して入力を変換するストリームエディタツールです。コマンド

sed s/regex/replace/g 

は、標準入力から読み込み、それがregexに一致するものを見つけるたびに、それはreplaceの内容に置き換えられます。あなたのケースでは、コマンド

sed s/[a-z A-Z 0-9 _]//g 

は、その正規表現とその代替として空の文字列として[a-z A-Z 0-9]を持っています。 (AとZの間のダッシュを忘れましたか?)これは、指定された正規表現に一致するものがすべて削除されることを意味します。この正規表現は、「azの間、AZの間、09の間の空白またはアンダースコアのいずれかの文字を意味します。このコマンドは基本的に入力とダンプから任意の英数字、空白または下線を削除します何がstdoutに残っている。出力が空であるかどうかをテストして、が、の英数字、スペース、または数字ではない文字があるかどうかを尋ねます。これはコードの動作方法です。

ツールのリストにsedを追加することをお勧めします。これは、コマンドラインでよく見られるツールであるため、基本的な知識が必要です。

+0

空の文字列でない場合、削除されていない文字があります。削除されなかったものは、英数字、空白、アンダースコアではない文字です。ああ、私はそれを今感謝を得る:) –

関連する問題