2013-01-18 44 views
-1

我讀這個質疑How to use conditional expression to select data?需要了解這個sed的表達

給出的SED解決方案是

sed -r '1d;/(\S+\s+){5}\S+/!d;/\+$/s/\S+\s+//5;/-$/s/\S+\s+//4' file

我無法理解的位

1d; - 這statmenet做什麼呢

/(\S+\s+){5}\S+/ - 它匹配任何非空白chnac電腦上5次,多了一個

!d不知道這是什麼一樣

/\+$/這意味着什麼,結束與+

s/\S+\s+//5;不知道

/-$/它搜索任何以 -

s/\S+\s+//4'不知道

+1

您是否閱讀過'sed'手冊頁?所有的命令都記錄在那裏。 – larsks

+0

我知道那裏的命令的含義,但不知道他們在這種情況下做了什麼。像d刪除模式空間,但不知道它是如何幫助'1d' – user1755071

+0

@ user55711我編輯了原始答案並添加了解釋。 – potong

回答

0

1d;

這只是刪除第一行。

/(\S+\s+){5}\S+/!d;

這個匹配5倍[{5}],然後將其任何(接着[\S]一次或多次[+]通過任何空白字符[\s]一次或多次[+]非空白字符)後跟非空白字符[\S]一次或多次[+],並刪除任何不包含匹配的行的全部行[!d]。

語法/pattern/d將搜索您的模式並刪除包含該模式的任何行。將其改爲/pattern/!d則相反,因爲它刪除了不包含該匹配的所有行。

/\+$/s/\S+\s+//5;

這種搜索模式\+$,它匹配的文字加號結束的任何行。然後它在這些行上執行操作s/\S+\s+//5。該命令的作用是搜索模式\S+\s+(您應該能夠根據最後一條語句的解釋來解釋該模式),並刪除每行中匹配的第五個匹配項(不是整行,請注意,只是匹配位)。

這裏工作的基本語法是s/pattern/replacement/。由於替換項留空,它具有刪除匹配的效果。將語法更改爲s/pattern/replacement/n僅替換第n次出現。

/-$/s/\S+\s+//4;

這幾乎與上述相同,不同之處在於它正在搜索用減號結束行,然後在這些線上,刪除的圖案的第四發生。

HTH。