前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >错行乱行文本处理方法正则及命令

错行乱行文本处理方法正则及命令

作者头像
火之高兴
发布2024-07-25 15:33:28
310
发布2024-07-25 15:33:28
举报
文章被收录于专栏:大数据应用技术

正则

以下正则在sublime中测试过。

匹配正数第n个逗号

^(.*?,.*?)\K, 作用: 匹配到csv文件每行数据出现的第n个逗号,可对其进行替换等操作。

匹配倒数第2个逗号

,(?=(?:[^,]*,){2}[^,]*$) 作用: 匹配到csv文件每行数据倒数出现的第n个逗号,可对其进行替换等操作。

Linux

换行编码标准化

sed 's/\r$//' file.csv > file2.csv

这个sed命令用于移除CSV文件中的行尾回车符(\r)。有些情况下,文件中存在linux换行符和windows换行符,都需要进行处理。具体来说,它执行以下操作:

  • s/\r$//: 这是一个替换命令,它使用正则表达式匹配行尾的回车符 (\r)。
  • $: 表示行尾。
  • \r: 表示回车符。
  • //: 表示替换为空字符串,即移除匹配到的回车符。

因此,这个sed命令的目的是将CSV文件中每行的行尾回车符移除。例如,如果CSV文件在Windows环境下编辑过,可能包含回车符,使用这个命令可以将其删除,得到一个没有行尾回车符的文件。

最后,file.csv > file2.csv 将输出重定向到名为 file2.csv 的文件中,以保存修改后的结果。

删除所有linux换行符

tr -d '\n' < input.txt > output.txt

这个tr命令用于删除文本文件 input.txt 中的所有换行符,并将结果输出到 output.txt 文件中。命令的解释如下:

  • tr: 是用于转换或删除字符的命令。
  • -d '\n': 表示删除(即不保留)换行符 (\n)。
  • < input.txt: 表示从 input.txt 文件中读取输入。
  • > output.txt: 表示将输出写入到 output.txt 文件中。

因此,这个命令的效果是将 input.txt 中的文本内容合并成一行,删除了原有的换行符,然后将结果保存到 output.txt 文件中。

匹配正数第2个逗号

sed 's/,/,"/2' t3.csv > output.txt 这个sed命令用于将CSV文件 t3.csv 中每行的第二个逗号后的内容替换为 ,",并将结果输出到 output.txt 文件中。具体解释如下:

  • s/,/,"/2: 这是一个替换命令,使用正则表达式匹配每行的第二个逗号(,),并将其替换为逗号后紧跟着,"
  • t3.csv: 输入文件的名称。
  • > output.txt: 将结果输出到 output.txt 文件中。

这个命令的效果是在每行的第二个逗号后插入 ,"。请确保在执行命令之前备份文件,以免不可逆的更改。

匹配文件中特定字符为换行符

代码语言:javascript
复制
sed 's/A4401/\
A4401/g' t2.csv > output.txt

这个sed命令的目的是将CSV文件 t2.csv 中的每个匹配到的 “A4401” 替换为新的行(换行符 + A4401),并将结果输出到 output.txt 文件中,用于处理分隔符导致的行错。

具体解释如下:

  • s/A4401/\ A4401/g: 这是一个替换命令,使用正则表达式匹配每个 “A4401”,并将其替换为换行符(\+回车,具体视环境而定) + A4401。g 表示全局替换,即一行中所有匹配的都会被替换。
  • t2.csv: 输入文件的名称。
  • > output.txt: 将结果输出到 output.txt 文件中。

这个命令可以在Unix/Linux环境中运行。如果在Windows环境中,请确保替换命令中的\+回车部分是有效的换行符表示法。

身份证号为每行开头

sed -i 's/,\([0-9]\{17\}[0-9X]\|^[0-9]\{15\}\),/\n\1,/g' your_file.txt 这个sed命令的目的是在CSV文件 your_file.txt 中匹配到 , 后面是17位数字或15位数字(带换行符),然后在匹配到的部分之前插入换行符,用于提取身份证号。

具体解释如下:

  • s/,\([0-9]\{17\}[0-9X]\|^[0-9]\{15\}\),/\n\1,/g: 这是一个替换命令,使用正则表达式匹配每个逗号后面是17位数字或15位数字的部分,并在匹配到的部分之前插入换行符。
  • ,: 逗号是匹配的目标。
  • \([0-9]\{17\}[0-9X]\|^[0-9]\{15\}\): 这是一个分组,匹配17位数字或者以行首 ^ 开始的15位数字。
  • \n\1,: \n 表示换行符,\1 表示匹配到的内容(17位数字或15位数字),, 表示替换后插入逗号。
  • g: 表示全局替换,即一行中所有匹配的都会被替换。
  • -i: 表示直接在原文件上进行替换操作。
  • your_file.txt: 输入文件的名称。

切割文件以内存大小

split -C 9M input.txt output_prefix 该命令是用于将文件 input.txt切分成每份大小为9M的部分,并以output_prefix` 为前缀命名切分后的文件。

  • split -C 9M input.txt output_prefix: 这个命令使用 split 工具,其中:
    • -C 9M: 指定每份切分的大小为9M。
    • input.txt: 要切分的输入文件。
    • output_prefix: 切分后的文件名的前缀。

例如,切分后的文件可能会以 output_prefixaa, output_prefixab, output_prefixac 等命名。

这个命令是按照文件的字节大小来进行切分的,并不会破坏文件的行结构。如果需要按照行来切分,可以使用 -l 选项,例如 split -l 1000 input.txt output_prefix,这样就会将文件每1000行切分成一个部分。

匹配到特定字符串,12345678,后,添加换行符

sed -i 's/\(,[0-9]\{8\},\)/\1\n/g' file.csv 这个sed命令的目的是在CSV文件 file.csv 中匹配到逗号后面是8位数字的部分,然后在匹配到的部分之后插入换行符。

具体解释如下:

  • s/\(,[0-9]\{8\},\)/\1\n/g: 这是一个替换命令,使用正则表达式匹配每个逗号后面是8位数字的部分,并在匹配到的部分之后插入换行符。
  • ,: 逗号是匹配的目标。
  • \([0-9]\{8\}\): 这是一个分组,匹配8位数字。
  • \1\n: \1 表示匹配到的内容(逗号后的8位数字),\n 表示换行符。
  • g: 表示全局替换,即一行中所有匹配的都会被替换。
  • -i: 表示直接在原文件上进行替换操作。
  • file.csv: 输入文件的名称。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-12-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 正则
    • 匹配正数第n个逗号
      • 匹配倒数第2个逗号
      • Linux
        • 换行编码标准化
          • 删除所有linux换行符
            • 匹配正数第2个逗号
              • 匹配文件中特定字符为换行符
                • 以身份证号为每行开头
                  • 切割文件以内存大小
                    • 匹配到特定字符串,12345678,后,添加换行符
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档