使用sed和IFS替换while循环内的值

时间:2019-04-23 17:32:40

标签: linux bash

我使用while循环将行拆分为变量,并在循环内使用那些相同的变量传递给sed来替换行。有没有一种方法可以打印整个行而不必将所有while变量打印到一个新文件中?

while IFS=';' read -r task_id date name action; do
    sed -e "s/\$date/$date/; s/\$name/$name/" >> $TASKSFILE.tmp
done < $FILE

输入文件如下:

1;20190423;Name1;print $date $name
2;20190424;Name2;print $date $name

预期输出:

1;20190423;Name1;print 20190423 Name1
2;20190424;Name2;print 20190424 Name2

1 个答案:

答案 0 :(得分:2)

您为什么不为此使用awk?在所有POSIX兼容平台上都可用。

awk -F';' '{sub(/\$date/,$2);sub(/\$name/,$3)} 1' "$FILE" > "${TASKSFILE}.tmp"
$ awk -F';' '{sub(/\$date/,$2);sub(/\$name/,$3)} 1' file
1;20190423;Name1;print 20190423 Name1
2;20190424;Name2;print 20190424 Name2