如何在unix中从文件中删除特定行?

如何在unix中从文件中删除特定行?,unix,sed,Unix,Sed,我有一个非常大的文件,需要从中删除一行(行号941573) 我对这个环境有点陌生,但我一直在谷歌上搜索这个问题,但没有用 我尝试过使用sed命令,但它似乎不起作用 sed -e '941572,941574d' filenameX > newfilenameY 我也试过了 sed -e '941573d' filenameX > newfilenameY 然而,“newfilenameY”文件和原始文件“filenameX”仍然包含我试图删除的行。这是一个fastq文件,尽管我不

我有一个非常大的文件,需要从中删除一行(行号941573)

我对这个环境有点陌生,但我一直在谷歌上搜索这个问题,但没有用

我尝试过使用sed命令,但它似乎不起作用

sed -e '941572,941574d' filenameX > newfilenameY
我也试过了

sed -e '941573d' filenameX > newfilenameY
然而,“newfilenameY”文件和原始文件“filenameX”仍然包含我试图删除的行。这是一个fastq文件,尽管我不认为这会有什么不同。就像我说的,我是unix新手,所以可能是sed命令错误了

删除了一行/行。所以你的第二种方法是有效的

$ sed '941573d' input > output
长示例:

% for i in $(seq 1000000)
do
echo i >> input
done
% wc -l input
1000000 input
% sed '941573d' input > output
% wc -l output
999999 output
% diff -u input output                                      :(
--- input       2012-10-22 13:22:41.404395295 +0200
+++ output      2012-10-22 13:22:43.400395358 +0200
@@ -941570,7 +941570,6 @@
 941570
 941571
 941572
-941573
 941574
 941575
 941576
% cat input
foo
bar
baz
qux
% sed '3d' input > output
% cat output             
foo
bar
qux
简短示例:

% for i in $(seq 1000000)
do
echo i >> input
done
% wc -l input
1000000 input
% sed '941573d' input > output
% wc -l output
999999 output
% diff -u input output                                      :(
--- input       2012-10-22 13:22:41.404395295 +0200
+++ output      2012-10-22 13:22:43.400395358 +0200
@@ -941570,7 +941570,6 @@
 941570
 941571
 941572
-941573
 941574
 941575
 941576
% cat input
foo
bar
baz
qux
% sed '3d' input > output
% cat output             
foo
bar
qux

下面是如何从文件中删除一行或多行

语法:

sed'{[/]| |[/]}d'
sed'{[/][,][/]d'
/…/=分隔符
n=行号
string=在第行中找到的字符串
regex=与搜索的模式对应的正则表达式
addr=一行的地址(数字或图案)
d=删除

我生成了一个包含1000000行的测试文件,并尝试了您的
sed-e'941573d'filenameX>newfilenameY
,它在Linux上运行良好

也许我们还有一些误解。行号是从一开始计算的,而不是从零开始计算的。如果从零开始计算,你会发现941572行不见了

您是否尝试了
diff filenameX newfilenameY
?它会突出显示任何意外更改

我对FASTQ格式不太了解,但您确定我们讨论的是文本文件行号,而不是序列号吗


一般的行长度限制为4096字节,您的行有没有超过这个限制?(这不太可能,但我认为值得一提)。

除了-e(我认为)之外,这与OP的做法有什么不同应该没有区别吗?@BrianAgnew没有区别。OP的第二种方法是有效的。第二种方法不起作用,伙计们,我已经试了一上午了:/那么你的问题是不完整的。从我的两个例子中可以看出,
d
有效。你的问题缺少什么信息?我刚刚试过这种方法(使用小得多的文件)这一切似乎都能正常工作。也许你想重新检查一下?我建议你运行
sed-ne'941573p'filenameX
,看看sed是否按照你期望的方式计算行号。