這沒有爲grep的不工作
.config
le-test.sh
a b c
後
.config
le-test.sh
a b c
任何人我
grep -vE '^\..*' tmp1.txt >grep.txt
grep -vE '^le-.*\.sh' grep.txt >tmp1.txt
tmp1.txt之前的工作有所幫助?
這沒有爲grep的不工作
.config
le-test.sh
a b c
後
.config
le-test.sh
a b c
任何人我
grep -vE '^\..*' tmp1.txt >grep.txt
grep -vE '^le-.*\.sh' grep.txt >tmp1.txt
tmp1.txt之前的工作有所幫助?
你看到了什麼,當你運行:
$ grep -vE '^\.' tmp1.txt
le-test.sh
a b c
$ grep -E '^\.' tmp1.txt
.config
$
(上正則表達式尾隨.*
不添加或刪除任何數據線) 。你應該看看我展示的是什麼;如果您確實沒有看到我展示的內容,那麼您需要開始查看grep
版本對-E
選項的作用。它應該啓用帶有擴展正則表達式的'egrep
-mode',而不是擴展正則表達式。試試:
$ grep -e '^\.' tmp1.txt
.config
$ grep -ve '^\.' tmp1.txt
le-test.sh
a b c
$
小寫-e
簡單地說下一個參數是正則表達式。如果你仍然沒有得到顯示的輸出,那麼你可能沒有使用grep
的普通版本。你需要檢查你正在運行的東西。您可以嘗試運行/usr/bin/grep
或測試它是否爲具有grep --version
等的GNU版本。
假設您可以獲得第一階段過濾所顯示的輸出,那麼第二階段也應該起作用。你說你想要消除'從le-
開始並以.sh
結尾的文件',但是你的第二個正則表達式只需要le-
開始後的.sh
;它沒有指定結束:悲痛
$ grep -vE '^\.' tmp1.txt | grep -E '^le-.*\.sh$'
le-test.sh
$ grep -vE '^\.' tmp1.txt | grep -vE '^le-.*\.sh$'
a b c
$
一個可能的原因是,如果您的數據文件了Windows行尾(CRLF),但你在UNIX上運行測試。正則表達式的\.sh$
部分會失敗,因爲在行結束之前還有一個CR(回車,'\r'
)。但是,這不應該影響過濾器過程的第一部分。
你應該能夠做到這一切在一個命令:
$ grep -E '^(\.|le-.*.sh$)' tmp1.txt
.config
le-test.sh
$ grep -vE '^(\.|le-.*.sh$)' tmp1.txt
a b c
$
這個版本確實需要-E
標誌;交替|
和分組的括號需要它。
你想要的結果是什麼? – Daedalus 2013-03-24 22:02:17
我想過濾le-test.sh和.config ... > a b c – 2013-03-24 22:04:37
所以你不想要.config或le-test.sh? – Daedalus 2013-03-24 22:07:45