2016-05-31 5 views
0

サーバ名を含むすべての行をログで検索する必要があります。 は、だから私は私のスクリプトで実行します。xは、サーバー名が含まれているAIX sh、文字列に二重引用符を含む式をgrepする方法はありますか?

grep $x ./input_log_files.csv >> test.txt 

この方法では、サーバー名を含む行を長い名前でトラップすることも問題です。明確にするために、ここにはAIXサーバーと、VAIXserverという仮想サーバーがあります。だから私が最初のものを検索すると、もう1つも取得します。 私のログファイルに、二重引用符で囲まれたサーバー名。私は必死に二重引用符でサーバ名にgrepしようとしています。また、「AIXserver」などのコンマで試してみましたが、成功しませんでした。

grepに二重引用符を考慮させるにはどうすればよいですか? 私は一重引用符でエスケープ文字を試してみました...成功しませんでした。

お願いします。 B 2

+0

二重引用符を一重引用符で囲むだけで、一重引用符で二重引用符をそのまま使用して文字列を定義することができます: 'grep '" AIXserver "'。/ input_log_files.csv'うまく動作するはずです。 – Oldskool

答えて

0

変数に引用符が含まれていることを確認してください:

x='"sname"' 

そして使用それが引用された:あなたのコマンドラインについては

$ testval=$'sname\nVsname\n"sname"\n"Vsname"\n"sname2"' 

$ echo "$testval" 
sname 
Vsname 
"sname" 
"Vsname" 
"sname2" 

$ echo "$testval" | grep "$x" 
"sname" 

を:

+0

Thx。私はこれを試してみる。 –

1
grep -w $x ./input_log_files.csv >> test.txt 

代替オプション

perl -ne 'print if /\b$x\b/' ./input_log_files.csv >> test.txt 
+0

ありがとうございました@Caburse!魅力のように働く!それはとても簡単でした! –

+0

私の悪い、それは初めとだけ働いています。接尾辞付きのサーバー名も間違って検出されます。したがって、Vservernameはservernameとして検出されませんが、servername2はservernameとして検出されます。 –

+0

おそらくxの値をチェックしますか?私はこれが正確な単語に一致するかどうかをテストした。このリンクには、いくつかの代替オプションがあります。 http://stackoverflow.com/questions/15758701/grepping-for-exact-words-with-unix – caburse

関連する問題