如何使用 shell 脚本获取两个字符串之间的行?

如何使用 shell 脚本获取两个字符串之间的行?

如何使用 shell 脚本获取两个字符串之间的行?例如,我有一个名为 file_text.txt 的文件,如下所示。

MEDIUMINT
CREATE ( 
MAXVALUE 
MEDIUMBLOB
MEDIUMINT
MEDIUMTEXT
MIDDLEINT );
MINUTE_SECOND
MINUTE_SECOND
CREATE (
MINUTE_MICROSECOND
MINUTE_SECOND
MOD );
MODIFIES
MEDIUMINT
CREATE (
NATURAL
NOT
NO_WRITE_TO_BINLOG
NULL );
NUMERIC
ON
OPTIMIZE

我想从文件中 grep CREATE 和 ; 之间的所有行。包括 CREATE 和 ;string。

答案1

类似这样的:

sed '/^CREATE/,/);$/!d;s/^CREATE (//;s/);$//' file_text.txt

将输出:

MAXVALUE 
MEDIUMBLOB
MEDIUMINT
MEDIUMTEXT
MIDDLEINT 

MINUTE_MICROSECOND
MINUTE_SECOND
MOD 

NATURAL
NOT
NO_WRITE_TO_BINLOG
NULL 

或者以防万一你需CREATE (要这样做);

sed '/^CREATE/,/);$/!d' file_text.txt

它会做类似的事情:

CREATE ( 
MAXVALUE 
MEDIUMBLOB
MEDIUMINT
MEDIUMTEXT
MIDDLEINT );
CREATE (
MINUTE_MICROSECOND
MINUTE_SECOND
MOD );
CREATE (
NATURAL
NOT
NO_WRITE_TO_BINLOG
NULL );

答案2

尝试这个

 echo "...youriput..." | tr -d "\n" | tr ';' '\n' | grep CREATE | sed "s/.*CREATE\(.*\)/CREATE\1;/"

相关内容