我有一个文本文件,创建时出错。要解决此问题,我需要删除具有特定唯一字符串的行,并删除@符号前面的以下行中的字符。我能用sed和cut做到这一点,但它只输出一行,而不是我文件中的许多其他1000行。以下是需要修复的文件部分的示例。我知道发生此错误的行#s(删除45603341并修改45603342)。
@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
谢谢!
答案 0 :(得分:1)
怎么样:
sed -i -e '45603341d;45603342s/^.*\(@.*\)$/\1/' <filename>
将<filename>
替换为您的文件名称。
答案 1 :(得分:0)
如果您想更改特定行并删除上面的行,请运行,
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
答案 2 :(得分:0)
这可能适合你(GNU sed):
sed '45603341!b;N;s/^.*\n[^@]*//' file
保持与任何其他行ecsept 45603341
一样。在这一行上,添加以下行,然后删除所有内容从开头到附加行中的第一个非@
。
答案 3 :(得分:0)
“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