sed コマンドは、2 つの文字列リテラルを連結する問題を修正します。

sed コマンドは、2 つの文字列リテラルを連結する問題を修正します。

私は、接続されている2つの文字列リテラルのすべてのインスタンスを検索する(または他のUnixユーティリティ)コマンドを探しています。sedこれにより、コマンドはその接続を2つの文字列リテラルの対応する組み合わせに置き換えます。

特に私は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ツールではなくプログラミング言語を使用していても構いません。)

ベストアンサー1

次のように見えます。

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")

これらの問題を解決するには、コメントを追加し、一致に'...'タグを付け、入力を複数行として処理する必要があります。可能ですが、より複雑です。

おすすめ記事