Unix-使用sed删除模式后的所有内容

Unix-使用sed删除模式后的所有内容,sed,Sed,我有一个如下所示的文件: memory=500G brand=HP color=black battery=5 hours 对于每一行,我都要删除=之后的所有内容以及= 最终,我想得到如下结果: memory:brand:color:battery: (每个单词后面都有冒号) 我可以使用一行sed命令吗 sed -e ':a;N;$!ba;s/=.\+\n\?/:/mg' /my/file 改编自 不过,坦率地说,我觉得这样的东西更具可读性: cut -d = -f 1 /my/file

我有一个如下所示的文件:

memory=500G
brand=HP
color=black
battery=5 hours
对于每一行,我都要删除
=
之后的所有内容以及
=

最终,我想得到如下结果:

memory:brand:color:battery: 
(每个单词后面都有冒号)

我可以使用一行sed命令吗

sed -e ':a;N;$!ba;s/=.\+\n\?/:/mg' /my/file
改编自

不过,坦率地说,我觉得这样的东西更具可读性:

cut -d = -f 1 /my/file | tr \\n :
改编自

不过,坦率地说,我觉得这样的东西更具可读性:

cut -d = -f 1 /my/file | tr \\n :

这里有一种使用GNU awk的方法:

awk -F= '{ printf "%s:", $1 } END { printf "\n" }' file.txt
结果:

memory:brand:color:battery:
memory:brand:color:battery
如果您不想在最后一个单词后面加冒号,可以像这样使用
GNU-sed

sed -n 's/=.*//; H; $ { g; s/\n//; s/\n/:/g; p }' file.txt
结果:

memory:brand:color:battery:
memory:brand:color:battery

这里有一种使用GNU awk的方法:

awk -F= '{ printf "%s:", $1 } END { printf "\n" }' file.txt
结果:

memory:brand:color:battery:
memory:brand:color:battery
如果您不想在最后一个单词后面加冒号,可以像这样使用
GNU-sed

sed -n 's/=.*//; H; $ { g; s/\n//; s/\n/:/g; p }' file.txt
结果:

memory:brand:color:battery:
memory:brand:color:battery
这可能适用于您(GNU-sed):

这可能适用于您(GNU-sed):

测试如下:

> cat temp
abc=def,100,200,dasdas
dasd=dsfsf,2312,123,
adasa=sdffs,1312,1231212,adsdasdasd
qeweqw=das,13123,13,asdadasds
dsadsaa=asdd,12312,123
> perl -F= -ane '{print $F[0].":"}' temp
abc:dasd:adasa:qeweqw:dsadsaa:
测试如下:

> cat temp
abc=def,100,200,dasdas
dasd=dsfsf,2312,123,
adasa=sdffs,1312,1231212,adsdasdasd
qeweqw=das,13123,13,asdadasds
dsadsaa=asdd,12312,123
> perl -F= -ane '{print $F[0].":"}' temp
abc:dasd:adasa:qeweqw:dsadsaa:
我的命令是

第一步:

sed的/([a-z]+)(\=.*)/\1:/g'文件名| cat>a

a类

内存:

品牌:

颜色:

电池:

第二步:

sed-e'N;s/\n/'a | sed-e'n;s/\n/'

我的输出是

内存:品牌:颜色:电池:

我的命令是

第一步:

sed的/([a-z]+)(\=.*)/\1:/g'文件名| cat>a

a类

内存:

品牌:

颜色:

电池:

第二步:

sed-e'N;s/\n/'a | sed-e'n;s/\n/'

我的输出是

记忆:品牌:颜色:电池: