在 shell 中使用撇号查找和转义名称

Find and escape names with apostrophe in shell

我有一个用户名列表,如下所示:

调用 StoredProcedure('O'Rielly@ysol-test.net');

调用 StoredProcedure('Mark@ysol-test.net');

调用 StoredProcedure('James@ysol-test.net');

如您所见,有些名称中有撇号,有些则没有。

在 Shell 中,如果出现超过 2 次,我希望能够找到并转义一行中第二次出现的撇号。

我已经设法使用 SED 删除了所有出现的地方,但我在这里画了一个空白。

如有任何帮助,我们将不胜感激。

I want to be able to find and escape the second occurrence of an apostrophe on a line IF there are more than 2 occurrences.

这非常简单:

sed "/'[^']*'[^']*'/s/'/\\'/2"
  • /'[^']*'[^']*'/ - 如果该行与此正则表达式匹配三个 '
  • s - 替换
    • ' - 撇号
    • \\' - \'。请注意,我们在双引号内。所以首先双引号将 \\ 更改为 \ 然后 sed 将 \ 更改为 \.
    • 2 仅出现第二次。