如何在unix中删除文件中的一行并修改下一行?
我有一个文本文件,创建时出错。要解决这个问题,我需要删除一行具有特定唯一字符串的行,并删除下一行@符号前面的字符。我可以用sed和cut来实现这一点,但它只输出一行,而不是我文件中的其他1000行。下面是需要修复的文件部分的示例。我知道发生此错误的行(删除45603341并修改45603342)如何在unix中删除文件中的一行并修改下一行?,unix,sed,cut,Unix,Sed,Cut,我有一个文本文件,创建时出错。要解决这个问题,我需要删除一行具有特定唯一字符串的行,并删除下一行@符号前面的字符。我可以用sed和cut来实现这一点,但它只输出一行,而不是我文件中的其他1000行。下面是需要修复的文件部分的示例。我知道发生此错误的行(删除45603341并修改45603342) @HWI-1KL135:70:C305EACXX:5:2105:6727:102841 1:N:0:CAGATC CCAAGTGTCACCTCTTTTATTTATTGATTT@HWI-1KL135:70
@HWI-1KL135:70:C305EACXX:5:2105:6727:102841 1:N:0:CAGATC
CCAAGTGTCACCTCTTTTATTTATTGATTT@HWI-1KL135:70:C305EACXX:5:1101:1178:2203 1:N:0:CAGATC
我需要输出像这样,并使其保持文件的其余部分不变
@HWI-1KL135:70:C305EACXX:5:1101:1178:2203 1:N:0:CAGATC
谢谢 如果要更改特定行并删除上面的行,请运行
sed -ri '45603342s/^([^@]*)(@.*)$/\2/g; 45603341d' aa
例如:
$ cat aa
@HWI-1KL135:70:C305EACXX:5:2105:6727:102841 1:N:0:CAGATC
CCAAGTGTCACCTCTTTTATTTATTGATTT@HWI-1KL135:70:C305EACXX:5:1101:1178:2203 1:N:0:CAGATC
$ sed -r '2s/^([^@]*)(@.*)$/\2/g; 1d' aa
@HWI-1KL135:70:C305EACXX:5:1101:1178:2203 1:N:0:CAGATC
那么:
sed -i -e '45603341d;45603342s/^.*\(@.*\)$/\1/' <filename>
sed-i-e'45603341d;45603342s/^.*\(@.*\)$/\1/'
用文件名替换
。这可能适用于您(GNU-sed):
保留任何其他行ecsept
45603341
。在这一行上,附加下一行,然后删除从开始到附加行中第一个非@的所有内容。另一种“sed”方法是使用vim宏(这也适用于Windows)。主要缺点是,您将无法像“sed”那样集成内部脚本。主要优点是,它允许进行复杂的替换,如“搜索此模式,然后清除行,向下3行,移动到第40列,切换行,…)。如果您已经熟悉VIM,它也更直观
在这种特殊情况下,您必须执行以下操作
qq (start macro recording)
/^@HWI.*CAGATC$ (search pattern)
dd (delete line)
vw (select word)
d (delete selected word)
q (end macro)
要运行宏100次,请执行以下操作:
100@q
你介意看看sed把两条线连接成一条线的能力吗在这里会有帮助。去掉换行符,然后切掉你不想要的部分,直到“@”字符。你能显示你正在使用的sed/cut代码吗?或者
sed-i'45603341N;s/*@/'文件名
这里的第一个建议刚刚删除了两个有问题的行。第二个建议奏效了!!!谢谢!!
100@q