2011-07-05 89 views
1

(我使用BSD桑达)可以sed做到这一点吗?

这个bash脚本:

sed -E -f parsefile < parsewords.d 

使用此命令文件:

# Delete everything before BEGIN RTL and after END RTL 
\?/\* BEGIN RTL \*/?,\?/\* END RTL \*/?!d 

# Delete comments unless they begin with /*! 
s?/\*[^!].*\*/??g  

# Delete blank lines 
/^[  ]*$/d 

# Break line into words 
s/[^A-Za-z0-9_]+/ /g 

# Remove leading and trailing spaces and tabs 
s/^[ ]*(.*)[  ]*$/\1/ 

有了这个输入文件:

any stuff 
/* BEGIN RTL */ 

/*! INPUTS: a b c d ph1 */ /* Comment */ 
x = a && b || c && d; 

    y = x ? a : b; /* hello */ 
z = ph1 ? x : z; 
    w = c || x || (z || d); 
/* END RTL */ 

生成此结果:

INPUTS a b c d ph1 
x a b c d 
y x a b 
z ph1 x z 
w c x z d 

这很好,到目前为止,但我真的很想有是这样的:

x = a && b || c && d; x a b c d 
y = x ? a : b; y x a b 
z = ph1 ? x : z; z ph1 x z 
w = c || x || (z || d); w c x z d 

使原线与脚本正在MODS的一起保留。

这可能与sed或我应该使用别的东西。 (任何其他意见也欢迎。)

编辑:这不是一个解析问题。这是关于保留原始输入行以及sed修改。

+0

答:什么是词法分析器?问:我应该用什么来解析这个问题。另请参阅yacc,野牛等 –

+0

@Nathan:但解析工作正常。唯一的问题是保留原始输入行。 – grok12

+0

如果不需要解析,也许使用awk而不是sed可以帮助解决您的任务。 – mkro

回答

4

使用'sed'的解决方案。

输入文件(INFILE):

any stuff 
/* BEGIN RTL */ 

/*! INPUTS: a b c d ph1 */ /* Comment */ 
x = a && b || c && d; 

    y = x ? a : b; /* hello */ 
z = ph1 ? x : z; 
    w = c || x || (z || d); 
/* END RTL */ 

'桑达' 计划(script.sed):

# Delete everything before BEGIN RTL and after END RTL 
\?/\* BEGIN RTL \*/?,\?/\* END RTL \*/?!d 

# Delete comments unless they begin with /*! 
s?/\*[^!].*\*/??g  

# Delete blank lines 
/^[  ]*$/d 

# Copy current line in hold space. 
h 

# Break line into words 
s/[^A-Za-z0-9_]+/ /g 

# Join both lines with a ';'. 
H ; g ; s/\n//; s/;\s+/;/

# Remove leading and trailing spaces and tabs 
s/^[ ]*(.*)[  ]*$/\1/ 

执行:

$ sed -E -f script.sed infile 

输出(我不明白用'INPUTS'这个单词的行,但是改变脚本以适应它):

/*! INPUTS: a b c d ph1 */ INPUTS a b c d ph1 
x = a && b || c && d; x a b c d 
y = x ? a : b; y x a b 
z = ph1 ? x : z; z ph1 x z 
w = c || x || (z || d); w c x z d 
+0

非常好,Birei,非常好! – grok12

0

我会说使用sed这种任务将证明是困难的。

也许你需要考虑解析/ lexing?

相关问题