gpt4 book ai didi

bash - 使用 sed 命令在同一行的两个模式之间输出文本

转载 作者:行者123 更新时间:2023-11-29 09:14:28 25 4
gpt4 key购买 nike

我试过这个命令,但它只能在一定程度上起作用。

输入文件内容:

this is begin not sure what is wrong end and why not

命令:

cat file | sed 's/.*begin \(.*\)end/\1/'

输出:

not sure what is wrong and why not

期望的输出(请参阅下面的注释):

not sure what is wrong 
  1. 我的 sed 命令搜索第一个模式和第二个模式,但忽略了第二个模式并打印文本。但是,它还会打印该行的其余部分,why not。我不想打印第二个模式之后的内容,只打印两个模式之间的内容。我不确定该怎么做。
  2. 如果同一行有两个end怎么办?

有人可以提供并解释命令吗?

最佳答案

对于您当前的输入,您可以使用此 sed:

sed 's/.*begin \(.*\) end.*/\1/' file

not sure what is wrong

区别在于在 end 之后使用 .* 匹配最后一个 end 之后的文本并在替换中丢弃。


但是对于您的第二部分,如果有两个 end 单词,sed 命令将无法正常工作,因为它会找到最后一个 end due到 .*.

贪婪匹配

例如,如果您的输入是:

this is begin not sure what is wrong end and why not end

那么下面的 awk 会更好:

awk -F 'begin | end' '{print $2}' file

not sure what is wrong

关于bash - 使用 sed 命令在同一行的两个模式之间输出文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49305058/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com