我只是在学习Bash脚本,我在这里找不到适合我的答案,所以这就是我要做的......
我的文件list.txt包含这样的内容..
group: 43 [message]
group: 312 [message]
group: 501210 [message]
在bash脚本中,我试图循环遍历整个文件并修复格式(删除冒号,在'group'和数字之间只留一个空格,最后删除数字后面的所有内容) :
group 43
group 312
group 501210
然后应该将其保存到同一个文件list.txt中,覆盖以前的内容。但是,我甚至无法弄清楚如何删除':'..
这是我的代码......
for line in $(< list.txt);do
sed 's/:/""/';
done
似乎加载第一行然后在无限循环中丢失。有人可以帮忙吗?
答案 0 :(得分:3)
你不需要for循环。 sed one liner可以完成这项工作:
sed -ir 's/(group):( [0-9]+).*/\1\2/' list.txt
或awk one-liner:
awk -F': | ' '{print $1,$2}' list.txt > /tmp/t.tmp && mv /tmp/t.tmp /path/to/list.txt
答案 1 :(得分:0)
由于这是关于学习bash脚本,你可以这样做:
while read group nr rest
do
printf "%s %d\n" "${group%:}" "$nr"
done < file > newfile && mv newfile file
或者输入文件中“group”没有变化:
while read group nr rest
do
printf "group %d\n" "$nr"
done < file > newfile && mv newfile file
但这通常比使用sed
,awk
等更慢。