使用 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
仅修改第一行,打印直到 /
.
的所有内容
我正在尝试使用 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
仅修改第一行,打印直到 /
.