簡體   English   中英

如何刪除多個文件中帶有特定文本的行並使用grep獲取輸出

[英]How to delete lines with specific text in multiple files and get output with grep

我試圖刪除目錄中50個文件中所有包含“ Cl”的行:並將修改后的文件發送到子目錄no_cl中

grep -vE "Cl" *.pdb > no_cl/$*.pdb

但是,這不起作用,

如何在此語句中使用通配符?

find -name "*.pdb" -type f -print0 | xargs -t -n1 -0 -I % sh -c 'grep -vE Cl % > no_cl/%'

討論:

您可以根據外殼使用shell循環,但是使用findxargs可以將文件列表從標准輸入轉換為多個grep調用。

/bin/ls *.pdb | xargs -t -n 1 -I % sh -c 'grep -vE Cl % > no_cl/%'

使用/bin/ls (使用任何別名防止ls獲得) *.pdb ,管xargs其使用-n 1把每個輸入令牌插入的命令。 -I %告訴xargs用輸入令牌替換% 然后使用Xargs執行sh -c 'grep -vE Cl % > no_cl/% -t回顯xargs執行的每個命令。

如果任何文件名中有空格,則會中斷。 等等,請閱讀此內容以進行更多的“不要使用ls”討論

或者: find -name "*.pdb" -type f -exec sh -c 'grep -vE Cl < "{}" > "no_cl/{}"' \\; ...也可能會因空格而中斷。 find -exec語法很奇怪。

因此,兩全其美。 使用find一個終止的文件為空的列表,使用xargs執行每個文件的grep

find -name "*.pdb" -type f -print0 | xargs -t -n1 -0 -I % sh -c 'grep -vE Cl % > no_cl/%'

-print0告訴find使用空終止, -0告訴xargs期望它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM