【问题标题】:How to remove " character within the double quotes on ubuntu?如何删除ubuntu双引号中的“字符?
【发布时间】:2015-05-24 00:57:06
【问题描述】:

我有一个条件如下的文件:

"one","two","three"" four","five"

所以我想删除双引号中的引号,所以输出是这样的:

"one","two","three four ","five"

如何在 ubuntu 上使用 awk 函数和正则表达式来做到这一点?谢谢...

【问题讨论】:

  • 问一个涵盖您需要的输入文件修改范围的问题可能会得到一个更好的答案,然后尝试将修改分解为微小的单个部分。

标签: regex file ubuntu awk quotes


【解决方案1】:

您可以简单地查找"" 并将其替换为空字符串。

喜欢:

sed -i 's/""//' *.txt

例如:

echo '"one","two","three"" four","five"' | sed 's/""//'
"one","two","three four","five"

【讨论】:

    【解决方案2】:

    使用awk 你可以做到:

    s="one","two","three"" four","five"'
    awk 'BEGIN{FS=OFS=","} {for (i=1; i<=NF; i++) gsub(/""/, "", $i)} 1' <<< "$s"
    "one","two","three four","five"
    

    【讨论】:

      【解决方案3】:

      sed 是解决此问题的正确工具。

      $ echo '"one","two","three"" four","five"' | sed 's/\([^,]\)"\+\([^,]\)/\1\2/g'
      "one","two","three four","five"
      

      上述正则表达式捕获一个或多个双引号前后退出的字符(字符不是逗号)。所以这将匹配存在于中心的双引号。

      $ echo '"one","two","three"" four","five"' | sed -r 's/([^,])"+([^,])/\1\2/g'
      "one","two","three four","five"
      
      • [^,] 匹配任何字符,但不匹配逗号。
      • ([^,]) 匹配的字符被捕获到第 1 组。它就像一个临时存储区。
      • "+一个或多个+
      • ([^,]) 捕获以下不是逗号的字符。
      • \1\2 所有匹配的字符都替换为存储在组索引 1 和组索引 2 中的字符。

      更新:

      $ echo '"one","two","three" vg " "gfh" four","five"' | sed -r 's/([^,])"+([^,])/\1\2/g;s/([^,])"+([^,])/\1\2/g'
      "one","two","three vg  gfh four","five"
      

      【讨论】:

      • 感谢 Avinash 先生的帮助,但我想问一下,因为我无法完全理解哈哈哈哈。如果我没记错,那可以代替 \1\2 是什么意思?而且我仍然对模式 ([^,])"\+([^,]) 感到困惑,这意味着什么,+ 字符是否意味着发生最少?非常感谢
      • 但是当我的字符串像这样时它不能完成:“one”,“two”,“three” vg “”gfh“four”,“five”
      猜你喜欢
      • 2013-09-28
      • 1970-01-01
      • 2019-10-20
      • 1970-01-01
      • 2017-05-08
      • 2020-07-10
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多