搜索并替换为遍历正则表达式



假设我有多个包含';'的字符串。只有当字符串中包含逗号时,我才想去掉';'。如果没有逗号,我想留下分号';'。

我想去掉分号的例子,';':

1,JoE,Stuff,more stuff; 05423089; 3029483-;98
输出:

1,JoE,Stuff,more stuff 05423089 3029483-98

我将处理数十万行数据。

基本上我在这里做的是一个文件由逗号分隔,我想省略所有分号,';'。我知道你可以这样做与正则表达式环顾四周,但我不知道如何搜索和替换它们。

如果没有逗号或者不是以逗号分隔的文件,我希望保留所有分号。我可能有一些文件是用';'或分号分隔的。

的例子:

1;乔,东西;更多的东西;054230893029483 - 98

在上面的例子中,我不想删除';'。

到目前为止我写的是:

s/((?=;)^.*?,.*?$)/$1/gi;

(?=;)检查由(^.?,.?)封装的分号,这是我想要匹配的字符串。我认为我没有正确调用我的"$1"one_answers"$2"。

搜索和替换的正确方法是什么?

因此,如果一行中包含逗号,则基本上需要删除所有分号。

这很容易用下面的perl一行代码

完成
perl -i -pe 's/;//g if /,/' file.txt

解释:

交换机:

  • -i[extension]:在适当的位置编辑<>文件(如果提供扩展名则进行备份)
  • -p:为每一行创建一个while(<>){...; print}循环;在输入文件中。
  • -e:告诉perl在命令行上执行代码。

:

  • s/;//g:删除行中所有分号
  • if /,/:仅当行包含逗号

最新更新