gpt4 book ai didi

regex - 替换大日志文件中的字符

转载 作者:行者123 更新时间:2023-12-01 13:25:48 26 4
gpt4 key购买 nike

如何在 Windows 下更改非常大的日志文件:

   3334-444-(4)  anything   anything2   4444-444-(4)  anything   anything2   4744-454-(4)  anything   anything2   48444 44-(4)  anything   anything2   8444-444-(4)  anything   anything2   4464-(444)-2  anything   anything2

为此:

33344444         anything   anything244444444         anything   anything247444544         anything   anything248444444         anything   anything284444444         anything   anything244644442         anything   anything2

删除除数字以外每行中第 18 位的所有内容并保留第二列的位置?

\\Edit: 问题是从位置 1 到 17 也可能是数字之间的空格。这是我认为可能有效的逻辑:
1.从位置。 1 到 17 替换 '(', ')', '-' 到 ' ' [空格]
2.从位置。 1 到 17 将 ' ' [空格] 替换为 '' [无] 并计算变化
3.从位置。 1到17根据上一步的变化在数字后加空格

最佳答案

好吧,如果你安装 cygwin ,你可以使用命令行工具的强大功能

$ sed 's/[-)(]//g' input
33344444 anything anything2
44444444 anything anything2
47444544 anything anything2
48444444 anything anything2
84444444 anything anything2
44644442 anything anything2

更新

有时将复杂的任务分成更小的部分会更容易。

假设输入看起来像这样(添加标尺)

         1         2         3         4         5
12345678901234567890123456789012345678901234567890
3334-444-(4) anything anything2
4444-444-(4) anything anything2
4744-454-(4) anything anything2
48444 44-(4) anything anything2
8444-444-(4) anything anything2
4464-(444)-2 anything anything2

第1步是用cut 好,把前17个字符剪掉,去掉不需要的存入tmp文件。

第 2 步是将字符 18 剪切到行尾并存储在 tmp 文件中。

第 3 步是将 tmp 文件合并为一个文件。

像这样:

$ cut -c1-17 input | sed 's/[-)( ]*//g' > c1

$ cut -c18- input > c2

$ paste c1 c2

如果这不符合您的审美观,您可以使用 awk 一次完成所有操作。将以下行放入名为“col.awk”的文件中,或者如果您喜欢它,请选择一个更好的名称:

{
x = substr($0, 0, 17)
y = substr($0, 18, length($0))
gsub(/[-)( ]*/, "", x)
}
{ printf "%-18s%s\n", x, y }

然后这样调用它:

$ awk -f col.awk input

输出(还是用尺子):

         1         2         3         4         5
12345678901234567890123456789012345678901234567890
33344444 anything anything2
44444444 anything anything2
47444544 anything anything2
48444444 anything anything2
84444444 anything anything2
44644442 anything anything2

请注意,cygwin 喜欢所有具有 unix 样式的行结尾,因此您可能需要将输入从 windows 样式转换为 unix 样式。 dos2unixfromdos 可能对您有所帮助(Google 是您的好 helper )。

关于regex - 替换大日志文件中的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15971458/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com