请教一下大家这个脚本怎么写 - V2EX
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
toyst
V2EX    Linux

请教一下大家这个脚本怎么写

  •  
  •   toyst May 25, 2021 3835 views
    This topic created in 1813 days ago, the information mentioned may be changed or developed.
    有个文本文件,N 行
    ```
    a1.txt
    a7.txt
    d9.log
    3j.log
    i6j.log
    .
    .
    .
    j34.ini
    l32.ini
    34j.ini
    ```
    现在想把包含 log 的行里面的数字去掉,类似这样:

    d9.log -> d.log
    d1.log -> d.log

    请假一下大佬们应该怎么写啊
    20 replies    2021-05-26 17:56:42 +08:00
    NeezerGu
        1
    NeezerGu  
       May 25, 2021
    正则

    先判断.log 结尾的文件,取点前面的字符串,所有\d 替换成空
    Cowhitewhite
        2
    Cowhitewhite  
       May 25, 2021
    都叫 d.log 不会被覆盖吗
    toyst
        3
    toyst  
    OP
       May 25, 2021
    @Cowhitewhite 这个不是重点。。
    toyst
        4
    toyst  
    OP
       May 25, 2021
    @NeezerGu 查找替换我会,不会返回保留其他的行。。
    hendyzone
        5
    hendyzone  
       May 25, 2021
    `sed 's/[0-9]//g' 文件名`
    lamesbond
        6
    lamesbond  
       May 25, 2021
    找出 log 关键字所在行号,在行号里面循环,用 sed 删除单行里的数字
    zplee
        7
    zplee  
       May 25, 2021   1
    import re
    res =[]
    with open("test.txt", "r") as f:
    for line in f:
    res.append(list(line.strip('\n').split(',')))

    for i in res:
    r = re.search('log', i[0])
    if r:
    print(re.sub(r"\d",'',i[0]))
    else:
    print(i[0])

    # python
    遍历每行正则匹配,然后替换掉数字
    zerofiny
        8
    zerofiny  
       May 25, 2021
    sed -i '/.log/s/[0-9]\?//g' aafile
    leavic
        9
    leavic  
       May 25, 2021   2
    有这功夫我随便找个文本编辑器,把 0-9 全部替换为空都结了,还写脚本。
    ik
        10
    ik  
       May 25, 2021 via iPhone
    sed '/log/s/[0-9]//g' xxx
    iamzcr
        11
    iamzcr  
       May 25, 2021
    看到这问题,用 go 的 slice+map 写了下,不知道效率咋样,原理就是按照 ASCII 编码去取 0-9ASCII 编码的范围

    package main

    import (
    "bufio"
    "fmt"
    "io"
    "os"
    "strings"
    )

    func delSlice(slice []byte, dels []byte) []byte {
    dMap := make(map[byte]bool)
    for _, s := range dels {
    dMap[s] = true
    }
    for i := 0; i < len(slice); i++ {
    if _, ok := dMap[slice[i]]; ok {
    slice = append(slice[:i], slice[i+1:]...)
    i = i - 1
    }
    }
    return slice
    }
    func ReadLine(fileName string) {
    f, err := os.Open(fileName)
    if err != nil {
    panic(err)
    }
    buf := bufio.NewReader(f)
    for {
    line, err := buf.ReadString('\n')
    if err != nil {
    if err == io.EOF {
    break
    }
    }
    line = strings.TrimSpace(line)
    slice := make([]byte, 1)
    slice = []byte(line)
    outSlice := make([]byte, 1)
    for i := 0; i < len(slice)-1; i++ {
    if slice[i] > 47 && slice[i] <= 58 {
    outSlice = append(outSlice, slice[i])
    }
    }
    inSlice := delSlice(slice, outSlice)
    str := string(inSlice)
    fmt.Println(str)

    }
    }

    func main() {
    ReadLine("./test.txt")
    }
    iamzcr
        12
    iamzcr  
       May 25, 2021
    @iamzcr 还要判断下文件类型,忘了
    toyst
        13
    toyst  
    OP
       May 25, 2021
    @leavic 我只替换 log 结尾的行,你这样替换,其他行也替换了
    autoxbc
        14
    autoxbc  
       May 25, 2021
    const path = './test.txt';
    const text = Deno.readTextFileSync(path)
    .match(/^.+$/gm)
    .map( line => line.endsWith('.log') ? line.replace( /\d/g ,'') : line )
    .join('\n');
    Deno.writeTextFileSync( path , text );
    agnoe
        15
    agnoe  
       May 26, 2021
    SED 找到某一行,然后在这一行中进行替换的命令写法
    sed -i '/#PermitRootLogin/s/#//g' /etc/ssh/sshd_config
    xingheng
        16
    xingheng  
       May 26, 2021
    @leavic #9 楼主说是只替换.log 结尾的行,怎么“全部替换”?

    BTW,上面的 python 和 go 在 sed 面前就是个渣渣
    dier
        17
    dier  
       May 26, 2021
    sed -ie "/log/ {s/[0-9]//g}" filename.txt
    dier
        18
    dier  
       May 26, 2021
    上面那条会修改原文件,如果不想修改原文件,去掉 e 这个参数即可 sed -i "/log/ {s/[0-9]//g}" filename.txt
    dier
        19
    dier  
       May 26, 2021
    呃,写反了,去掉 i 这个参数 sed -e "/log/ {s/[0-9]//g}" filename.txt
    cwjwgg
        20
    cwjwgg  
       May 26, 2021
    @dier make 学习
    About     Help     Advertise     Blog     API     FAQ     Solana     1176 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 54ms UTC 23:15 PVG 07:15 LAX 16:15 JFK 19:15
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86