sedを使用して、特殊文字、数字、スペースを含むすべての行を削除します。

sedを使用して、特殊文字、数字、スペースを含むすべての行を削除します。

私はシェル(特にbash)の使用にかなり慣れていないのですが、DNA配列を含むファイルをより便利な形式に変換するスクリプトを作成中です。残念ながら、これらのファイルの多くには、ラベル情報などに使用される余分な行が含まれています。特殊文字、数字、スペースを含む行を除外するsedコマンドが必要です。スペースを含む行を削除するには、次のようにするのがかなり簡単であることがわかりました。

sed '/ /d' infile

数字を含む行を削除するのも、正規表現を使用した同様の戦略になると思います。ただ、sed で特殊文字を扱う方法がまだ見つかっていません。

ありがとう

答え1

^アルファベット文字のみで構成されていない行を削除するには、開始アンカー( )と終了$アンカー( )を追加する必要があります。

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

代わりに、少なくとも1つの非アルファベット文字を含む行を削除できます。

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

キャレットは、^前の式のようにアンカーとしてではなく、ここでは否定演算子として機能していることに注意してください。


あるいは、grepの行全体(-xまたは--line-regexp)オプションを使用する

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

(最初のsed式と同等)または逆マッチ( -v)を使用する

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

(2 番目の sed 式に相当)。

答え2

回答はOPのコメントから引用しました

私はそれを理解したと思います、私は単にsedこれを次のように変更しましたsed '/[[:alpha:]]//!d' infile、これは論理が続くならば、以下以外のものを含む行を除外するはずです[A-Za-z]

関連情報