1

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

memory=500G
brand=HP
color=black
battery=5 hours

对于每一行,我想删除之后=的所有内容以及=.

最终,我想得到类似的东西:

memory:brand:color:battery: 

(都在一行中,每个单词后都有冒号)

有没有我可以使用的单行 sed 命令?

4

5 回答 5

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

改编自这个很好的答案

然而,坦率地说,我会发现这样的东西更具可读性:

cut -d = -f 1 /my/file | tr \\n :
于 2012-09-26T04:47:07.230 回答
1
perl -F= -ane '{print $F[0].":"}' your_file

测试如下:

> 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:
于 2012-09-26T06:20:59.960 回答
1

这可能对您有用(GNU sed):

sed -i ':a;$!N;s/=[^\n]*\n\?/:/;ta' file
于 2012-09-26T05:50:11.990 回答
1

这是一种使用方法GNU awk

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

结果:

memory:brand:color:battery:

如果你不想在最后一个单词后面加冒号,你可以GNU sed这样使用:

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

结果:

memory:brand:color:battery
于 2012-09-26T04:56:55.833 回答
0

我的命令是

第一步:

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

记忆:

牌:

颜色:

电池:

第二步:

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

我的输出是

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

于 2012-10-01T10:26:10.867 回答