Bash
sed 命令修復連接兩個字元串文字
我正在尋找一個
sed
(或其他 Unix 實用程序)命令來查找連接的兩個字元串文字的所有實例,以便該命令將這些連接替換為兩個字元串文字的相應組合。具體來說,我正在嘗試為 Go 和 Java 原始碼自動進行這些編輯。
\"
如果出現在任一字元串文字中,或者如果出現在任一字元串文字中,則該命令不應中斷+
。該命令應在字元前後處理任意數量的空白字元(或缺少空白字元)
+
。一些例子:
"foo" + "bar"
=>"foobar"
"\"foo" + "bar"
=>"\"foobar"
"foo"+"bar"
=>"foobar"
"something else with " + "other words"
=>"something else with other words"
a + "bar" + "baz" + c
=>a + "barbaz" + c
"" + "bar" + "" + "foo"+ x
=>"barfoo"+ x
(我不介意答案是否使用程式語言而不是 Unix 工具。)
可能是這樣的:
sed -E ' :1 s/^(([^"]+|"(\\.|[^"\\])*")*"(\\.|[^"\\])*)"[[:blank:]]*\+[[:blank:]]*"/\1/ t1'
上:
"foo" + "bar" "\"foo" + "bar" "foo"+"bar" "something else with " + "other words" "foo\"+" + "+" + "bar" "1"+"\"+"+"2"
它給:
"foobar" "\"foobar" "foobar" "something else with other words" "foo\"++bar" "1\"+2"
現在,如果我們必須處理任何 java 程式碼,這還不夠,您必須考慮
"
可能嵌入在註釋中或在'"'
或在幾行中添加您的內容,例如:/* "-quoted strings ("A" + "B") have been converted to "AB" */ '"' // blah " + "" c = '"'; s = "+"; c2 = '"'; f("foo" + "bar")
要解決這些問題,您必須為評論、
'...'
標記添加匹配並以多行方式處理輸入。可行,但更複雜。