使用bash从文本文件中的4个标记之间提取文本
好的,这里有一个棘手的问题。。。我有一个file1,我想用file1中的特定文本创建一个file2使用bash从文本文件中的4个标记之间提取文本,bash,sed,awk,Bash,Sed,Awk,好的,这里有一个棘手的问题。。。我有一个file1,我想用file1中的特定文本创建一个file2 random useless text #START random IMPORTANT text #END random useless text random useless text #START random IMPORTANT text #END random useless te
random useless text
#START
random IMPORTANT text
#END
random useless text
random useless text
#START
random IMPORTANT text
#END
random useless text
我想提取第一对#START和#END(包括#的)之间的文本,但忽略第二对#START和#END。请注意,在同一个文件中,开始和结束对出现了两次。我只想要第一对之间的东西(包括#的符号)
说了这么多,做了这么多之后,我应该只得到这个字面上的结果(仅从第一对#开始#结束:
#START
random IMPORTANT text
#END
在另一篇文章中,有人使用: sed-n“/这是令牌1/,/这是令牌2/p” 这是一种删除单个成对字符串“This a token 1”和“This a token 2”的方法 但当我在这个sed中使用“#开始”和“#结束”时,它保留了两对#开始和#结束 注意:第一对“开始”和第二对“结束”之间的内容总是不同的。我会使用awk:
awk'/#开始/{flag=1}标志{print}/#结束/{exit}您的_文件
说明:
RS
和输出记录分隔符ORS
,例如:
gawk-vrs='[[:space:][]+'-vrs='''/#START/{flag=1}flag{print}/#END/{exit}'
这会将记录分隔符设置为任意数量的空白字符,并将输出记录分隔符设置为仅空格。因此,令牌由空白分隔,并且没有任何exta可能的信息不会进入输出。例如,在此类输入上比较第一个版本与此版本:
blahblahblah #START
important text
#END blah blah blah
fdsfs
如有需要,请参阅官方参考手册,以获取gawk
:我将使用awk:
awk'/#开始/{flag=1}标志{print}/#结束/{exit}您的_文件
说明:
RS
和输出记录分隔符ORS
,例如:
gawk-vrs='[[:space:][]+'-vrs='''/#START/{flag=1}flag{print}/#END/{exit}'
这会将记录分隔符设置为任意数量的空白字符,并将输出记录分隔符设置为仅空格。因此,令牌由空白分隔,并且没有任何exta可能的信息不会进入输出。例如,在此类输入上比较第一个版本与此版本:
blahblahblah #START
important text
#END blah blah blah
fdsfs
如有需要,请参阅官方参考手册,了解《gawk》:这可能适合您(GNU-sed):
说明:
删除(不要打印)任何不在/#START/,/#END/!d
和#START
之间的内容。这将只在#END
和#START
之间打印#END
退出,但遇到/#END/q
#END
删除(不要打印)任何不在/#START/,/#END/!d
和#START
之间的内容。这将只在#END
和#START
之间打印#END
退出,但遇到/#END/q
#END