Sed:打印一行中字符串和另一个字符串之间的行

Sed:打印一行中字符串和另一个字符串之间的行,sed,Sed,我在一个目录中有100个html文件 我需要从每个匹配正则表达式的文件中打印一行,同时打印两个正则表达式之间的行 下面的命令正确地提供了结果 sed -n '/string1/p' *.html >result.txt sed -n '/string2/,/string3/p' *.html > result2.txt 但我需要一个result.txt文件,格式为 string1 string2 string3 我一直在尝试与grep,awk和sed,并已搜索,但我没有找到答案

我在一个目录中有100个html文件

我需要从每个匹配正则表达式的文件中打印一行,同时打印两个正则表达式之间的行

下面的命令正确地提供了结果

sed -n '/string1/p' *.html >result.txt
sed -n '/string2/,/string3/p' *.html > result2.txt
但我需要一个result.txt文件,格式为

string1
string2
string3
我一直在尝试与grep,awk和sed,并已搜索,但我没有找到答案


任何帮助都将不胜感激。

这可能适合您:

sed -n '/string1/p;/string2/;/string3/p' INPUTFILE > OUTPUTFILE
或者这里有一个
awk
解决方案:

awk '/string1/ { print }
     /srting2/ { print ; p = 1 } 
     p == 1 { print }
     /string3/ { print ; p = 0 }' INPUTFILE > OUTPUTFILE

这可能适合您:

sed -n '/string1/p;/string2/;/string3/p' INPUTFILE > OUTPUTFILE
或者这里有一个
awk
解决方案:

awk '/string1/ { print }
     /srting2/ { print ; p = 1 } 
     p == 1 { print }
     /string3/ { print ; p = 0 }' INPUTFILE > OUTPUTFILE

只需将两个SED-epress放在一个调用中:

echo $'a\nstring1\nb\nstring2\nc\nstring3\nd\n' | \
sed -n -e '/string1/p' -e '/string2/,/string3/p'
输入为:

a
string1
b
string2
c
string3
d
输出为:

string1
string2
c
string3

只需将两个SED-epress放在一个调用中:

echo $'a\nstring1\nb\nstring2\nc\nstring3\nd\n' | \
sed -n -e '/string1/p' -e '/string2/,/string3/p'
输入为:

a
string1
b
string2
c
string3
d
输出为:

string1
string2
c
string3

我不太明白。你有两个不同的问题?1) 打印与regexp 1和2匹配的每个*.html中的行)打印与2个regexp匹配的行之间的每个*.html中的行?但是您想为每个X.html将这些输出合并为一个X.txt吗?(您能使用Perl/Python吗?)理想情况下,我希望使用一行sed,查找每个文件并打印一个与正则表达式匹配的字符串和一个介于2个正则表达式之间的字符串。然后将输出发送到result.txt,这样我就可以从100个我不太理解的文件中获得100行string1 string2 string3。你有两个不同的问题?1) 打印与regexp 1和2匹配的每个*.html中的行)打印与2个regexp匹配的行之间的每个*.html中的行?但是您想为每个X.html将这些输出合并为一个X.txt吗?(您能使用Perl/Python吗?)理想情况下,我希望使用一行sed,查找每个文件并打印一个与正则表达式匹配的字符串和一个介于2个正则表达式之间的字符串。然后将输出发送到result.txt,这样我就可以从100个文件中获得100行string1 string2 string3我相信您想说的是
/string2/,
,而不是
/string2/sed-n'/string1/p/string2/,/string3/p'INPUTFILE>OUTPUTFILE非常完美。非常感谢(请修改;to,我相信你想说的是
/string2/,
,而不是
/string2/;
。.sed-n'/string1/p;/string2/,/string3/p'输入文件>输出文件是完美的。非常感谢(请修改;to,