Linux命令行查找和替换

Posted

技术标签:

【中文标题】Linux命令行查找和替换【英文标题】:Linux command Line find and replace 【发布时间】:2022-01-09 17:53:09 【问题描述】:

我有一个包含内容的 file.txt

2021-12-03;12.20.31;13;00000.00;00000.00;无链接

2021-12-03;12.33.31;15;00199.94;00000.00;状态正常

2021-12-03;12.35.33; 2;01962.33;00015.48;;状态正常

2021-12-03;13.05.31;13;00000.00;00000.00;无链接

那么像下面这样输出什么命令

2021-12-03;12:20:31;13;00000.00;00000.00;无链接

2021-12-03;12:33:31;15;00199.94;00000.00;状态正常

2021-12-03;12:35:33; 2;01962.33;00015.48;状态正常

2021-12-03;13:05:31;13;00000.00;00000.00;无链接

注意。 cut -b 12-19 file.txt(是时间)

感谢您的帮助。 里多

【问题讨论】:

请编辑您想要更改的问题。看来您想要:更改为 .? 请提供足够的代码,以便其他人更好地理解或重现问题。 【参考方案1】:

我假设您要修改的行包含在一个文件中(我称之为 filea.txt)。该脚本应该可以解决您的问题。

文件'filea.txt'的内容:

$> cat filea.txt
2021-12-03;12.20.31;13;00000.00;00000.00;NO LINK   
2021-12-03;12.33.31;15;00199.94;00000.00;Status OK 
2021-12-03;12.35.33; 2;01962.33;00015.48;;Status OK
2021-12-03;13.05.31;13;00000.00;00000.00;NO LINK

脚本文件:

$> cat refrm
#!/usr/bin/bash                                                      
                                                                 
in_file="filea.txt"                                                      
                                                                 
while read -r line || [ -n "$line" ];                                
do                                                                   
    line=$(echo "$line" | sed -E 's/;2,/;/g')                
    IFS=$'\n'                                                    
    line=$(echo $line | sed 's/;/\n/g')                        
    arr=($(IFS='\n' ; echo "$line"))                           
                                                                 
    for ((n=0; n < $#arr[*]; n++))                             
    do                                                           
        if [[ $arr[n] =~ ^[0-9]2\.[0-9]2\.[0-9]2 ]]; 
        then                                                 
            arr[n]=`echo $arr[n] | sed 's/\./:/g'`     
        fi                                                   
    done                                                         
    nline=$(IFS=";" ; echo "$arr[*]")                          
    echo "$nline"                                              
done < $in_file                                                    

输出:

$> refrm
2021-12-03;12:20:31;13;00000.00;00000.00;NO LINK
2021-12-03;12:33:31;15;00199.94;00000.00;Status OK
2021-12-03;12:35:33; 2;01962.33;00015.48;Status OK
2021-12-03;13:05:31;13;00000.00;00000.00;NO LINK                                             

【讨论】:

以上是关于Linux命令行查找和替换的主要内容,如果未能解决你的问题,请参考以下文章

Linux shell sed 命令详解

linux shell命令怎么查找文件中指定字符串,并把这个字符串所在行和下面一行的内容写到另外一个文件中?

我将使用啥 GNU/Linux 命令行工具对文件执行搜索和替换?

Linux:使用sed命令替换时,如何写入Tab符号呢

linux进入vim的编辑模式与命令模式操作命令

Linux--Vi编辑命令(插入替换命令行模式撤销)