如何在unix中提取两个单词之间的文本?
我
上午
使用
基本
sed
表达式:-
sed -n "am/,/sed/p"
获取“am”和“sed”之间的文本 它将输出“am \n using \n basic \n sed”。 但我真正的问题是字符串是否为:-
I
上午
使用
基本
grep
表达。
我在这句话中应用了上面的 sed 然后它给出了“am \n using \n basic \n grep \n expression” 它不应该给它。如何丢弃 如果没有匹配的话会输出吗?
有什么建议吗?
I
am
using
basic
sed
expression :-
sed -n "am/,/sed/p"
to get the text between "am" and "sed"
which will output "am \n using \n basic \n sed".
But my real problem is if the string would be :-
I
am
using
basic
grep
expression.
I applied the above sed in this sentence
then it gave "am \n using \n basic \n grep \n expression"
which it should not give it. How to discard the
output if there would be no matching?
Any suggestions?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
问题中的命令(
sed -n "/am/,/sed/p"
,注意添加的斜杠)意味着:的行 am
p
) 直到出现包含sed
的行因此它打印:
因为它包含
am
。如果您要添加更多行,它们也会被打印,直到出现包含sed
的行。例如:
结果:
我认为 - 你想做的是这样的:
示例:
The command in the question (
sed -n "/am/,/sed/p"
, note the added slash) means:am
p
) until a line containingsed
occursTherefore it prints:
because it contains
am
. If you would add some more lines they will be printed, too, until a line containingsed
occurs.E.g.:
results in:
I think - what you want to do is something like that:
Example:
您必须使用稍微不同的 sed 命令,例如:
仅打印包含跨越多行的文本
am
和sed
的行。You have to use slightly different sed command like:
To print ONLY lines that contain text
am
andsed
spanned across multiple lines.当使用 SED 时,这可以工作,但它是一个相当压倒性的语法......
如果您需要裁剪多行 (\n) 文本的一部分,您可能想使用 grep 尝试更简单的方法:
例如,我发现这是获取perforce变更列表描述的最简单方法(没有其余的CL信息):
注意,您可以使用<=和>=来包含或不包含输出中的开始/结束短语。
When Using SED this can work but it's quite an overwhelming syntax...
if you need to crop part of a multi-line (\n) text, you might want to try a simpler way using grep:
For example, I find this as the easiest way to grab perforce changelist description (without rest of CL info):
Note, you can play with the <= and >= to include or not include, the starting/ending phrases in the output.