使用 sed 删除以正斜杠开头的 header 行的一部分

using sed to remove part of a header line starting with forward slash

我正在尝试使用 sed 调整文件中的 header 行,并且我查看了许多以前的帖子,但到目前为止我根据这些帖子尝试过的任何内容都没有帮助。所以这里是: 我在 mac OS 上使用终端, 我有一个包含 header 行的文件,如下所示:以 >

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

我想要:

>KeepThis_text_VariableNumbersHere

所有 header 行都以 ." 结尾,但 header 行中也有引号。

我已经尝试过使用 sed 的多种变体,这里有一些:

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

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

行,很好,但是去掉了整个 header 行

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

感谢您的任何建议!

我会使用捕获从 > 开始的所有内容,包括 space 之前的所有内容,然后是捕获组中的 /。只保留捕获组并丢弃剩余的文本,如下所示:

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

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

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

我不确定 header 行 对你来说是否意味着 第一行 。如果您真的是指 第一行 ,请将 s 命令限制在第一行,如下所示:

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

如果您只想更改第一行,请考虑 寻址 您的命令 (s///):

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

或寻址以 >:

开头的所有行
sed -re '/^>/s/\/\w+//g'

或者如果您想删除从 / 到行尾的所有内容:

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

如果您只想保留正斜杠之前的部分,则可以执行以下操作:

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

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

awk 来拯救!

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

仅修改第一行,打印直到 /.

的所有内容