【问题标题】:Replacing value inside while loop with using sed and IFS使用 sed 和 IFS 替换 while 循环内的值
【发布时间】:2019-04-23 17:32:39
【问题描述】:

我使用 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

【问题讨论】:

标签: linux bash


【解决方案1】:

为什么不使用 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

【讨论】:

    猜你喜欢
    • 2020-05-27
    • 1970-01-01
    • 1970-01-01
    • 2014-10-27
    • 2015-01-21
    • 1970-01-01
    • 2021-07-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多