2015-10-06 112 views
0

我试图在文件标题行使用sed来调整,我已经看了很多以前的帖子,但没有我基于这些至今已经帮助尝试了标题行的一部分。所以这里有云: 我使用的是Mac OS终端, 我有标题行的文件是这样的:有>使用SED删除开始斜杠

>KeepThis_text_VariableNumbersHere /LotsOFText/Here to get rid of." 

开始我想有:

>KeepThis_text_VariableNumbersHere 

所有的标题行结尾“,但标题行内也有引号。

我已经尝试了许多使用sed的变体,下面是几个:

sed -e 's/^\/*.*//' input.file > output.file #this removed everything 

sed -e 's/^\/*.*"//' input.file > output.file #this kept non-header 

线,这是很好的,但摆脱了整个标题行的

sed -e 's/>KeepThis_Text_*.* *.*”/>KeepThis_Text_*.*\//' input.file > output.file #This did not change anything 

谢谢你的任何建议!

+0

'cut -d/-f1'为您提供了第一部分,但您对标题行有何意义?只有文件中的第一行或者所有以'>'开始并以'.'结尾的行?或者他们也必须有两个斜线? '>我是一个带有两个//和一个点的标题行。“ –

回答

0

我会用捕捉一切从>开始,包括空格,接着捕获组/之前的一切。将只保留捕获组和扔掉剩余的文本,像这样:

sed 's/\(>[^\/]\+\) .*/\1/' input.txt 

它使用扩展的正则表达式,使用-r选项看起来更干净:

sed -r 's/(>[^\/]+) .*/\1/' input.txt 

我不知道,如果标题行对你而言意味着第一行。如果你真的是在第一线,限制s命令的第一行是这样的:

sed -r '1s/(>[^/]+) .*/\1/' input.txt 
+0

感谢您解释您在此处所做的操作,我能够使用上面的第一个响应来处理它,但是您的文章有一些有用的信息供将来使用, SED! – Carla

+0

欢迎您:) – hek2mgl

+0

@Carla Btw,如果您喜欢*上面的*第一个响应,那么您需要接受它。这是通过点击该答案旁边的复选标记完成的。 – hek2mgl

1

如果你只是想改变一号线,考虑解决您的命令(s///):

sed -re '1s/\/\w+//g' 

或解决与>开头的所有行:

sed -re '/^>/s/\/\w+//g' 

,或者如果你想从/放下一切结束线路:

sed -re '/^>/s/\/.*//g' 
1

如果你想只保留先于正斜杠的部分,那么下面会做什么:

sed -e 's-/.*--' 

该命令的分隔符不限于/,它只是一个约定。在这里,我用-作为命令分隔符。然后该命令:用斜杠替换任何内容,直到文本为空的行结束。

+0

Hooray,这个工作很完美,非常感谢你!我知道我必须靠近,但是使用所有正斜杠会让事情变得糟糕,这对于未来的工作很有帮助。 – Carla

0

awk来拯救!

awk -F/ 'NR==1{print $1;next}1' file 

只修改第一行,打印一切为/