0

我只是在学习 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

它似乎加载了第一行,然后在无限循环中丢失。任何人都可以帮忙吗?

4

2 回答 2

3

你不需要 for 循环。sed 一个班轮可以完成这项工作:

sed -ir 's/(group):( [0-9]+).*/\1\2/' list.txt

或 awk 单线:

awk -F': | ' '{print $1,$2}' list.txt > /tmp/t.tmp && mv /tmp/t.tmp /path/to/list.txt
于 2013-04-24T22:21:44.157 回答
1

由于这是关于学习 bash 脚本,您可以这样做:

while read group nr rest
do
  printf "%s %d\n" "${group%:}" "$nr"
done < file > newfile && mv newfile file

或者如果“组”在输入文件中没有变化:

while read group nr rest
do
  printf "group %d\n" "$nr"
done < file > newfile && mv newfile file

但这通常比使用sed,awk等要慢。

于 2013-04-25T04:26:08.627 回答