我正在尝试使用sed调整文件中的标题行,我已经查看了许多以前的帖子,但我已经尝试过的任何基于迄今为止的帮助。所以这里:
我在mac OS上使用终端,
我有一个标题行的文件看起来像这样:从>
>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 :(得分:1)
如果您只想更改第1行,请考虑寻址您的命令(s///
):
sed -re '1s/\/\w+//g'
或解决以>
开头的所有行:
sed -re '/^>/s/\/\w+//g'
或者如果你想放弃从/
到行尾的所有内容:
sed -re '/^>/s/\/.*//g'
答案 1 :(得分:1)
如果您只想保留正斜杠之前的部分,则以下内容将执行:
sed -e 's-/.*--'
命令的分隔符不限于/
,它只是一个约定。在这里,我使用-
作为命令分隔符。然后命令是:将斜杠后面的任何内容替换为带有空文本的行尾。
答案 2 :(得分:0)
我会使用捕获从>
开始的所有内容,包括空格之前的所有内容,然后是捕获组中的/
。只保留捕获组并丢弃剩余的文本,如下所示:
sed 's/\(>[^\/]\+\) .*/\1/' input.txt
使用-r
选项使用扩展正则表达式看起来更干净:
sed -r 's/(>[^\/]+) .*/\1/' input.txt
我不确定标题行是否意味着第一行。如果您的意思是第一行,请将s
命令限制为第一行,如下所示:
sed -r '1s/(>[^/]+) .*/\1/' input.txt
答案 3 :(得分:0)
要求救援!
awk -F/ 'NR==1{print $1;next}1' file
仅修改第一行,将所有内容打印到/
。