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命令怎么查找文件中指定字符串,并把这个字符串所在行和下面一行的内容写到另外一个文件中?