Bash

sed 命令修復連接兩個字元串文字

  • May 7, 2022

我正在尋找一個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")

要解決這些問題,您必須為評論、'...'標記添加匹配並以多行方式處理輸入。可行,但更複雜。

引用自:https://unix.stackexchange.com/questions/701701