2014-04-14 109 views
1

有人能給我一個\ S在正則表達式工作的例子嗎?我的理解是,它應該與不\ t \ N開頭的任何行等 S正則表達式

如果這是我的文件:

test 
\ttesting 

cat testfile | awk '/\S/ {print}' 

不產生輸出,但我期望它輸出\ t測試。我還沒有找到一個很好的例子,說明S應該做什麼或如何讓它起作用。

回答

0

我不認爲\S標誌在awk所有實現支持。它不在documentation的正則表達式運算符下列出。您的awk版本可能支持也可能不支持。

的另一個簡單的命令行工具支持它是grep。但是,出於您的目的,您需要指定您只想匹配字符串開頭的非空白字符,因此您需要使用^運算符來開始字符串的開頭。

cat testfile | grep '^\S' 

輸出:

testing 
+0

它在gnu awk中有效。 – BMW

+0

@寶馬,你能找到任何文件支持這一點,並提供一個版本號? – merlin2011

+1

@寶馬,我剛剛修改了我的ansewr,因爲你的版本顯然必須支持它。 – merlin2011

0
\S 

當未指定UNICODE flags被,匹配任何非空白字符 ;這相當於set [^ \ t \ n \ r \ f \ v] LOCALE 標誌對非空白匹配沒有額外的影響。如果UNICODE被設置,則 然後任何字符未被標記爲空格的Unicode字符 屬性數據庫被匹配。

https://docs.python.org/2/library/re.html

0

下面是示例:

cat -A file 

sdf$ 
     $ 
test$ 
^Itesting$ 
$ 
$ 
^I^I^I^I$ 
asdf$ 
afd afd$ 

所以後在GNU AWK v4.1的運行

awk '/\S/' file 

sdf 
test 
     testing 
asdf 
afd afd 

它消除所有空行或而空間線(只有空間,標籤,o [R輸入等)

這裏是在Cygwin中我的awk版本

awk --version |head -1 
GNU Awk 4.1.0, API: 1.0 (GNU MPFR 3.1.2, GNU MP 4.3.2) 

參考鏈接:The GNU Awk User's Guide

3.5 gawk-Specific Regexp Operators 

GNU software that deals with regular expressions provides a number of additional regexp operators. These operators are described in this section and are specific to gawk; they are not available in other awk implementations. Most of the additional operators deal with word matching. For our purposes, a word is a sequence of one or more letters, digits, or underscores (‘_’): 

\s 
Matches any whitespace character. Think of it as shorthand for [[:space:]]. 


\S 
Matches any character that is not whitespace. Think of it as shorthand for [^[:space:]]. 


\w 
Matches any word-constituent character—that is, it matches any letter, digit, or underscore. Think of it as shorthand for [[:alnum:]_]. 


\W 
Matches any character that is not word-constituent. Think of it as shorthand for [^[:alnum:]_]. 
1

書面,/\S/比賽,如果有一個非空白字符在任何地方線。因此它匹配兩條線。這聽起來像你想匹配就行的開頭:僅在一行的開頭

$ cat testfile | awk '/^\S/ {print}' 
test 
$ cat testfile | awk '/^\s/ {print}' 
     testing 

插入符號^匹配。從上面的第一個示例中可以看出,/^\S/與該行開始之後的第一個字符是非空白字符的任何行匹配。因此,它與測試文件中的第一行相匹配。

第二個例子的情況正好相反:如果行開頭後面的第一個字符是空白字符(\s\S相反:它與空格匹配),則匹配。因此,它與以製表符開頭的行相匹配。

\S\s行爲在section 3.5 of the GNU awk manual其中規定記載:

\ S
匹配任何空白字符。把它看作是[[:space:]]的簡寫。

\ S
匹配任何非空白的字符。把它看作是[^ [:space:]]的縮寫。

0
\S is everything excluded by \s 

\s means [\r\n\t\f ]所以更好地觀看。如果你不希望打印出與\ t開頭的字符串,然後只用\S

字符串與任何\r\t\n\f開始,你需要\s

所以不是\s\S

,所以你可以猜到它: \s + \S means everything即相當於.*

相關問題