删除行首的字符,但从第 2 行开始

Posted

技术标签:

【中文标题】删除行首的字符,但从第 2 行开始【英文标题】:Remove char at beginning of line, but start at line 2 【发布时间】:2020-11-10 12:25:09 【问题描述】:

我正在使用 nodejs 创建一个 .csv 文件。 该文件的内容来自多个数组。

我将 , 替换为 ;,因此 .csv 格式可以正常工作。

现在我有一个小问题:从我的 CSV 文件的第 2 行开始,我在每行的开头都有分号。

这是一个例子:

14-07-2020;intLAMi_IgnRate1;intLAMi_IgnRate2
;22:00:00;59.020397;48.343338;51.309185

现在,因为我需要使用 npm 包 replace-in-file, 替换为以下代码:

const replace = require('replace-in-file')
const options = 
      files: f,
      from: [/,/g, /^;/g],
      to: [';', ' ']
    

replace(options)
    .then(() => 
        resolve(true)
    )

我的问题是,我对正则表达式不太满意。

上面的代码替换了所有,,但似乎正则表达式/^;/g不起作用

有人知道我的代码为什么不起作用吗?

【问题讨论】:

嗨弗洛里安!您是否尝试过使用标准的 javascript replaceAll 函数?这是一个相当简单的字符串操作,我不确定在这种情况下您是否需要担心正则表达式replaceAll(";", ","); 如果您确实想使用正则表达式,请务必使用编辑器检查您的表达式,例如: regex101.com @nurnachman replaceAll 很新,大多数浏览器还没有。 node.js 中也不存在 @Barmar 记下,所以可以使用replace(/,/g, ";") 【参考方案1】:

/^;/g 在文件开头搜索分号,因为^ (某些软件逐行拆分字符串,所以在这种情况下,^ 指的是行首,因此会混淆)。

试试

const options = 
   files: f,
   from: [/,/g, /\n;/g],
   to: [';', "\n"]

如果您将整个文件作为字符串读取,还可以使用replace 函数:

fileContent.replace(/,/gi, ';').replace(/\n;/gi, "\n")

【讨论】:

【参考方案2】:

/^;/gm 应该适用于分号引导线。

启用多行 (m) 标志时,开始和结束锚点(^ 和 $)将匹配一行的开始和结束,而不是整个字符串的开始和结束。

全局搜索(g),保留最后一个匹配的索引,允许后续搜索从上一个匹配的末尾开始。如果没有全局标志,后续搜索将返回相同的匹配项。

让我向您介绍正则表达式方面的新朋友。 https://regexr.com.

【讨论】:

以上是关于删除行首的字符,但从第 2 行开始的主要内容,如果未能解决你的问题,请参考以下文章

vim学习笔记删除操作

复制/etc/profile至/tmp/目录,用查找替换命令删除/tmp/profile文件中的 行首的空白字符及在vim中设置tab缩进为4个字符

删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行的行首的#和空白字符

vim编译器中 行首行尾的一些操作

Linux命令行下常用的快捷键

bash shell编程