(我使用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修改。
答:什么是词法分析器?问:我应该用什么来解析这个问题。另请参阅yacc,野牛等 –
@Nathan:但解析工作正常。唯一的问题是保留原始输入行。 – grok12
如果不需要解析,也许使用awk而不是sed可以帮助解决您的任务。 – mkro