使用 sed 刪除所有包含特殊字元、數字和空格的行

使用 sed 刪除所有包含特殊字元、數字和空格的行

因此,我對使用 shell(特別是 bash)相當陌生,我正在編寫一個腳本,該腳本會將包含 DNA 序列的檔案轉換為更有用的格式。不幸的是,其中許多文件將包含用於標記資訊等的無關行。我發現使用以下命令刪除帶空格的行相當簡單

sed '/ /d' infile

我想刪除包含數字的行將是使用正規表示式的類似策略。我只是還沒有真正找到任何方法來處理 sed 中的特殊字元。

謝謝

答案1

要刪除任何不完全由字母字元組成的行,您需要新增開始 ( ^) 和結束 ( $) 錨點

sed '/^[[:alpha:]]*$/!d' file

相反,您可以刪除至少包含一個非字母字元的任何行

sed '/[^[:alpha:]]/d' file

請注意,插入符號^在這裡充當否定運算符,而不是像前面的表達式中那樣充當錨點。


或者,使用 grep 的整行 (-x--line-regexp) 選項

grep -x '[[:alpha:]]*' file

(相當於第一個 sed 表達式)或使用反向比對 ( -v)

grep -v '[^[:alpha:]]' file

(相當於第二個 sed 表達式)。

答案2

答案取自OP評論

我想我已經弄清楚了,我只是將我的內容更改sed為這樣sed '/[[:alpha:]]//!d' infile——如果邏輯遵循的話——應該排除包含除以下內容之外的任何內容的行[A-Za-z]

相關內容