将两个操作合并在一个命令中 - awk

将两个操作合并在一个命令中 - awk

我需要改变

- 从

Car
Bus

- 到

Helicopter
Airplane

这两个命令就足够了。

awk -i inplace '{sub(/Car/,"Helicopter")}1' file
awk -i inplace '{sub(/Bus/,"Airplane")}1' file

这个命令也足够了。

sed -e 's/Car/Helicopter/' \
    -e 's/Bus/Airplane/' \
    -i file

在“awk”中,可以像“sed”一样将两个操作组合在一个命令中。

提前致谢!

答案1

试试这样:

awk -i inplace '{sub(/Car/,"Helicopter")} {sub(/Bus/,"Airplane")}1' file

现在你有 3 个Condition {Action}区块。1是块的特殊情况condition {action}

或者试试这个:

awk -i inplace '{sub(/Car/,"Helicopter") ; sub(/Bus/,"Airplane")}1' file

,因为一个操作块可以有多个语句。

答案2

awk -i inplace '
    /^Car$/ { print "Helicopter"; next }
    /^Bus$/ { print "Airplane";   next }
            { print }' file

通过匹配整行(使用^$锚点),我们确保不会将字符串作为其他行中的子字符串进行匹配(例如Carin Cart)。通过对找到的行进行操作,然后立即执行,next我们可以防止将行更改为可能触发后续模式的内容。

相关内容