我有一个大文本文件,其中包含两个令牌之间的文本块,我想要提取并放入一个新文件中。我希望每个块被提取为单行(每个块都有自己的行)。
我使用了这个解决方案:Extract lines between 2 tokens in a text file using bash
sed -n '/<!-- this is token 1 -->/{:a;n;/<!-- this is token 2 -->/b;p;ba}' inputfile
它几乎完美无缺。我遇到的问题是提取的块是两行,我想将它压缩到一行。我怎样才能做到这一点?
示例:
<token1>
text to
extract
<token2>
<token1>
text to
extract
<token2>
输出应如下所示:
text to extract
text to extract
答案 0 :(得分:0)
我能够通过单独运行来实现这一目标:
library(scales)
graph<-ggplot(df, aes(x=DATE, y= Revenue, fill = DATE)) + geom_bar(stat = "identity") +labs(x = "Date", y= "Revenue") + scale_x_date(labels = date_format("%m-%d"))+facet_wrap(~`TYPE2`+`TYPE3`)
ggplotly(graph)
第一个解决方案后在我的文件上
答案 1 :(得分:0)
sed
比$ cat ip.txt
<token1>
text to
foo
extract
<token2>
<token1>
text to
extract
123
bar foo
baz
<token2>
$ awk '/<token1>/{f=1; next} /<token2>/{print a; a=""; f=0} f{a = a ? a" "$0 : $0}' ip.txt
text to foo extract
text to extract 123 bar foo baz
perl
与$ perl -lne 'if(/<token1>/){$f=1; next} if(/<token2>/){print "@a"; undef @a; $f=0}; push(@a,$_) if $f' ip.txt
text to foo extract
text to extract 123 bar foo baz
$ perl -lne 'if(/<token1>/){$f=1; next} if(/<token2>/){print $a; $a=""; $f=0}; $a .= $a?" $_":$_ if $f' ip.txt
text to foo extract
text to extract 123 bar foo baz
或
ssh hostname 'for pid in $(ps -ef | grep "some process" | awk '{print $2}'); do kill -9 $pid; done'