(我使用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