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スクリプトは一致するすべての行を削除します。いいえ最初のNM
。man 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