如何用Bash提取指定标记间内容?不使用awk
用Sed提取指定标记间内容的单行命令
别发愁啦!你之前用Sed没成功,应该是没处理好标记在同一行的情况,毕竟你要提取的是句子片段而非单个单词。针对你的需求,这里有个完美的单行命令:
假设你的文件名为your_file.txt,执行这条命令:
sed 's/.*\*\*\* Start copy here \*\*\*\(.*\)\*\*\* End copy here \*\*\*.*/\1/' your_file.txt
命令解释:
s/启动Sed的替换模式.*匹配开头到*** Start copy here ***之前的所有字符(包括前面的句子内容)\*\*\* Start copy here \*\*\*精确匹配你的开始标记(星号是正则特殊字符,必须用\转义)\(.*\)用转义括号捕获标记之间的目标内容(这部分就是我们要保留的)\*\*\* End copy here \*\*\*精确匹配结束标记.*匹配结束标记之后的所有剩余内容/\1/把整行内容替换成我们捕获的那部分(\1代表第一个捕获组的内容)
运行这条命令后,就能得到你想要的输出:
the political bonds which have connected them with another, and to assume among the powers of
额外扩展:如果标记跨行怎么办?
要是以后遇到标记在不同行的情况,也可以用这条命令:
sed -n '/\*\*\* Start copy here \*\*\*/,/\*\*\* End copy here \*\*\*/{//!p}' your_file.txt
-n让Sed默认不输出任何内容/start/,/end/匹配从开始标记行到结束标记行的范围{//!p}对范围内的行,排除掉匹配开始/结束标记的行,只输出中间内容
内容的提问来源于stack exchange,提问作者hello world
相关产品推荐
相关产品推荐

