微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何提取unix中两个单词之间的文本?

一世

上午

运用

基本

SED

expression: –

sed -n "am/,/sed/p"

得到“am”和“sed”之间的文本,它将输出“am n使用 n basic n sed”。 但我真正的问题是,如果string是:

一世

上午

运用

基本

grep的

expression。

在这个句子中应用了上面的sed,然后它给出了“ n使用 n basic n grep nexpression式”,它不应该给它。 如果没有匹配,如何丢弃输出

sed help:匹配和replace文字“ n”(不是换行符)

如何用Windows命令在文本文件中查找string并复制下5个字符

Windows脚本:列出不匹配模式的文件

如何select两种模式之间的线?

如何使用awk在文件中写入一个文件(); 并在之后添加一个printline; 打印find的string?

有什么build议么?

禁用sed中反斜杠的转义函数

查找和replace循环内部

如何在BYTE数组中search模式?

Sed未能取代UTF-8编码

unix:如何判断一个string是否匹配正则expression式

问题中的命令( sed -n "/am/,/sed/p" ,注意添加的斜杠)表示:

找到一个包含字符串am

并打印( p )直到包含sed的行发生

因此它打印:

I am using basic grep expression

因为它包含了am 。 如果要添加更多的行,它们也将被打印,直到包含sed的行出现。

例如:

echo -e 'I am using basic grep expression.nOne more linenOne with sednOne without' | sed -n "/am/,/sed/p"

结果是:

I am using basic grep expression. One more line One with sed

我想 – 你想要做的是这样的:

sed -n "s/.*(am.*sed).*/1/p"

例:

echo 'I am using basic grep expression.' | sed -n "s/.*(am.*sed).*/1/p" echo 'I am using basic sed expression.' | sed -n "s/.*(am.*sed).*/1/p" sed -n "s/.*(am.*sed).*/1/p"

你必须使用稍微不同的sed命令:

sed -n '/am/{:a; /am/x; $!N; /sed/!{$!ba;}; /sed/{s/n/ /gp;}}' file

仅打印包含横跨多行的文本am和sed行。

使用SED时,这可以工作,但它是一个相当压倒性的语法…如果您需要裁剪多行( n)文本的一部分 ,您可能想要尝试一个更简单的方法使用grep

cat multi_line.txt | grep -oP '(?s)(?<=START phrase).*(?=END phrase)'

例如,我觉得这是抓取perforce变更列表描述 (没有CL信息的其余部分)的最简单的方法

p4 describe {CL NUMBER} | grep -oP '(?s).*(?=Affected files)'

请注意,您可以使用<=和> =在输出中包含或不包含开始/结束短语。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐