我有一个如下所示的文件:
memory=500G
brand=HP
color=black
battery=5 hours
对于每一行,我想删除之后=
的所有内容以及=
.
最终,我想得到类似的东西:
memory:brand:color:battery:
(都在一行中,每个单词后都有冒号)
有没有我可以使用的单行 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 | tr \\n :
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:
这可能对您有用(GNU sed):
sed -i ':a;$!N;s/=[^\n]*\n\?/:/;ta' file
这是一种使用方法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
我的命令是
第一步:
sed 's/([az]+)(\=.*)/\1:/g' 文件名 |cat >a
猫
记忆:
牌:
颜色:
电池:
第二步:
sed -e 'N;s/\n//' a | sed -e 'N;s/\n//'
我的输出是
内存:品牌:颜色:电池: