sed 特定の行を削除

sed 特定の行を削除

sedを使用してNMで始まる文字列を削除するには?

入力ファイル

NF
NM_001708.2(OPN1SW)
NM_000374.5(UROD)
NM_000235.4(LIPA)
NM_021828.5(HPSE2)
HPSE2, EX8-9DEL
HPSE2, EX3DEL
NM_021828.5(HPSE2)

結果ファイル

NM_001708.2(OPN1SW)
NM_000374.5(UROD)
NM_000235.4(LIPA)
NM_021828.5(HPSE2)
NM_021828.5(HPSE2)

この方法は私が望む方法ではありません。 ^は始まりと逆を意味するからです。最適化方法を教えてください。ありがとうございます。

sed -r '/^[^NM]/d' input_file 

答え1

$ sed '/^NM/!d' input_file
NM_001708.2(OPN1SW)
NM_000374.5(UROD)
NM_000235.4(LIPA)
NM_021828.5(HPSE2)
NM_021828.5(HPSE2)

!一致を無効にするため、このsedスクリプトは一致するすべての行を削除します。いいえ最初のNMman sed(GNUバージョン)から:

アドレス(またはアドレス範囲)の後とコマンドの前に! aを挿入できます。これは、アドレス(またはアドレス範囲)が一致しない場合にのみコマンドが実行されることを指定します。

アドレス(「NM」で始まる行)はどこに/^NM/!dあり、コマンドは(削除)です。/^NM/d


ただし、^正規表現では否定(または用語の反転)のみを意味します。角かっこ式内の最初の文字の場合[^NM]「Nの後にMが続くすべての文字」ではなく、「NまたはM以外のすべての文字と一致」を意味します。

答え2

他のツールを使用しても問題ない場合は、試してみてください。grep

grep -e '^NM' input_file

またはawk

awk '/^NM/{print}' input_file

レビューで推奨されているように、次のものを使用できますawk

awk '/^NM/' input_file

関連情報