Linux SED - 保留空间 - 所有行的一个值

标签 linux bash text sed sh

我想使用 sed 转换文件。源文件具有以下格式(“deviceId”是占位符):

CREATE DATABASE "deviceId";
column value=88i 1445137680000000000 
column value=68i 1445137620000000000
column value=80i 1445137560000000000
column value=39i 1445137500000000000

转换后,格式如下:

USE DATABASE "db";
series,device=deviceId column=88i 1445137680000000000 
series,device=deviceId column=68i 1445137620000000000
series,device=deviceId column=80i 1445137560000000000
series,device=deviceId column=39i 1445137500000000000

但我不明白,如何在每一行中获取 deviceId。我当前的 sed.txt 包含以下代码:

s/^\(CREATE DATABASE ".*";\)$/USE DATABASE "db";/g
s/\(.*\) .*=\(.*\) \(.*\)/series,device= \1=\2 \3/g

并生成以下输出:

USE DATABASE "db";
series,device= column=88i 1445137680000000000·
series,device= column=68i 1445137620000000000
series,device= column=80i 1445137560000000000
series,device= column=39i 1445137500000000000

有人可以解释我如何在每行中获取 deviceId 吗?我已经看到使用 Hold-Space/Flow-Work 是可行的。我试过了,但我不知道这应该如何工作。

谢谢!

最佳答案

您正在尝试使用错误的工具。我希望,虽然你可以想出一些神奇的 rune 来强制 sed 产生你想要的输出,但为了健壮性、可移植性、简单性、效率以及软件的几乎所有其他理想属性,标准的 UNIX 工具可用于任何其他比单行上的简单替换是 awk:

$ awk -F'["=]' '
    NR==1{dev=$(NF-1); $0 = "USE DATABASE \"db\""}
    NR>1 {$0 = "series,device=" dev " column=" $2}
1' file
USE DATABASE "db"
series,device=deviceId column=88i 1445137680000000000
series,device=deviceId column=68i 1445137620000000000
series,device=deviceId column=80i 1445137560000000000
series,device=deviceId column=39i 1445137500000000000

关于Linux SED - 保留空间 - 所有行的一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36375017/

相关文章:

Linux - 可打印字符

Bash 长选项/标志 - 怎么做?

java - 限制对 JTextArea 中某些行的访问?

mongodb - Mongodb 中的文本搜索不起作用

file - 在谷歌 GWT 中读取文本文件?

linux - 选择一行时在awk中有条件

c - 将 pthread 变量保留在本地

linux - 在 Linux Mint :/usr/bin/ld: cannot find -lhdf5_hl 上安装 Caffe

linux - 需要修改我的排序管道,使其成为直通(如猫)

linux - linux删除重复文件的方法