2013-12-19 40 views
3

我想在bash中編寫一個腳本來處理一個文件,該文件的行有5列,我希望分隔符是一個單獨的空格(「」)。 除此之外的所有內容都會導致錯誤,甚至超過1個空格。 例如,該行是合法的:first last 1234124 complex no每行檢查一個特定的分隔符 - bash

而這

first last 1234124 complex no 

first_last 1234124 complex no 

應導致一個錯誤。

我試過一些命令,但我試過的一切都處理了一個空間和多個 - 同樣的方式。

等待由您的知識共享。謝謝。

回答

1

您可以使用grep -qP與此正則表達式:

grep -qP '^(\S+\s){4}\S+$' 

測試:

> s='first last 1234124 complex no' 
> grep -qP '^(\S+\s){4}\S+$' <<< "$s" && echo "valid" || echo "invalid" 
valid 

> s='first last 1234124 complex no' 
> grep -qP '^(\S+\s){4}\S+$' <<< "$s" && echo "valid" || echo "invalid" 
invalid 
+0

謝謝,你能解釋一下每個標誌和參數的作用嗎? –

+0

-q代表安靜,-P代表PCRE,然後是^(\ S + \ s){4} \ S + $'是正則表達式,其中'\ S'匹配非空格,'\ s'匹配空格 – anubhava

1

如果使用正則表達式中設置字段分隔符爲一個空格(而不是其他),你可以用下面的報告有問題的線路

awk -F'[ ]' 'NF != 5' file.txt 
相關問題