2

いくつかのファイルを調べて、文字列 'host' (一重引用符付き) を探しています。コメントなし (#) の文字列を含むファイルをキャプチャしたい。

最初の例のテスト ケースは正常に機能しますが、以下の 2 番目のケースは機能しません。2 番目のケースは、私が作成し、先頭にスペースを挿入したテスト ファイルです。したがって、制御文字はなく、空白だけであることがわかります。

どちらのサーバーもかなり最近のバージョンの Linux です。

2 番目の例でテキストがキャプチャされない理由は何ですか? hostをgrepしてからgrep -vでコメントをフィルタリングできることは知っていますが、これを理解していないことに悩まされています。

/home/user2> $ cat set.txt
   'host'
/home/user2> $ grep -E "^\s+'host'" set.txt
   'host'

他の Linux サーバーで grep を実行しても、必要なデータが取得されません。

[user1@wweb1 ~]$ cat set.txt
     'host'  
[user1@wweb1 ~]$ grep -E "^\s+'host'" set.txt
[user1@wweb1 ~]$
4

1 に答える 1

0

grepバージョンや種類によって\sは動作しない場合があります。grep 2.12 を使用する私のシステムでは、とにかく動作しますが\s、については言及されていません。他のバージョンではこれが有効になっていない場合があります。

マニュアルページから:

The Backslash Character and Special Expressions
   The symbols \< and \>  respectively  match  the  empty  string  at  the
   beginning and end of a word.  The symbol \b matches the empty string at
   the edge of a word, and \B matches the empty string provided  it's  not
   at the edge of a word.  The symbol \w is a synonym for [_[:alnum:]] and
   \W is a synonym for [^_[:alnum:]].

さらに、man grep | grep "\\\\s"何も返しません。それだけです: についての言及はありません\s

代わりに、次のように使用できます[:space:]

 user@pc $ grep -E "^[[:space:]]+'host'" set.txt
     'host'

そのため、grep のバージョンを確認し、それらすべてで機能する構文を探してください。このメーリング リストへの投稿によると\s、grep 2.5.1 では機能しませんでしたが、2.6.3 では機能したため、2.6.3 より前のバージョンを使用している場合、\s.

于 2013-02-06T10:46:20.693 に答える