一世
上午
运用
基本
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] 举报,一经查实,本站将立刻删除。