【发布时间】:2017-06-12 04:03:08
【问题描述】:
我正在解析包含“key=value”对行的文件。一个例子可能是这样的:
Normal line
Another normal line
[PREFIX] 1=Something 5=SomethingElse 26=42
Normal line again
我想保留所有不包含 key=value 对的行,同时按如下方式转换所有包含 key=value 对的行:
Normal line
Another normal line
[PREFIX]
AAA=Something
EEE=SomethingElse
ZZZ=42
Normal line again
假设我有一本有效的翻译词典。
我现在所做的是将输入传递给 sed,在那里我将空格转换为与 '^\[' 匹配的行的换行符。
然后将输出通过管道传输到这个 awk 脚本中:
BEGIN {
dict[1] = "AAA"
dict[5] = "EEE"
dict[26] = "ZZZ"
FS="="
}
{
if (match($0, "[0-9]+=.+")) {
key = ""
if ($1 in dict) {
key = dict[$1]
}
printf("%7s = %s\n", key, $2)
}
else {
print
next
}
}
整个命令行就变成了:
cat input | sed '/^\(\[.*\)/s/ /\n/g' | awk -f script.awk
我的问题是:有什么办法可以在中间包含 sed 操作,从而摆脱额外的步骤?
【问题讨论】: