好的,这是一个棘手的问题...我有一个文件1,我想用file1创建一个只有特定文本的文件2.
random useless text
#START
random IMPORTANT text
#END
random useless text
random useless text
#START
random IMPORTANT text
#END
random useless text
Run Code Online (Sandbox Code Playgroud)
我想在第一对#START和#END(包括#)之间提取文本,但忽略第二对#START和#END.请注意,#START #END对在同一文件中出现两次.我只想要FIRST对之间的内容(包括#的标志).
完成所有这些后,我应该只有这个字面结果(仅来自第一对#START #END:
#START
random IMPORTANT text
#END
Run Code Online (Sandbox Code Playgroud)
在另一篇文章中使用了一些:
sed -n"/这是令牌1 /,/这是令牌2/p"
这是一种删除单个成对字符串"这是令牌1"和"这是令牌2"的方法
但是当我在这个sed中使用"#START"和"#END"时,它会保留两对#START和#END.
注意:第一个#START #END之间的内容总是与第二对#START #END之间的内容不同.
我会用awk:
awk '/#START/{flag=1} flag{print} /#END/{exit}' your_file
说明:
注意:可以将多个awk规则应用于记录.
另请注意:根据您的任务,您可能需要调整记录分隔符RS和输出记录分隔符ORS,例如:
gawk -v RS='[[:space:]]+' -v ORS=' ' '/#START/{flag=1} flag{print} /#END/{exit}'
这将记录分隔符设置为任意数量的空白字符,并将记录分隔符输出到空间.因此,令牌由空格分隔,并且没有可能的信息不会进入输出.比较,例如第一版与此版本的输入:
blahblahblah #START
important text
#END blah blah blah
fdsfs
Run Code Online (Sandbox Code Playgroud)
gawk如果需要,请参阅官方参考手册:链接
| 归档时间: |
|
| 查看次数: |
714 次 |
| 最近记录: |