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

时间:2012-09-26 04:40:22

标签: sed

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

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

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

最终,我希望得到类似的内容:

memory:brand:color:battery: 

(每个单词后面都有冒号一行)

我可以使用单线sed命令吗?

5 个答案:

答案 0 :(得分:2)

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

改编自this fine answer

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

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

答案 1 :(得分: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

答案 2 :(得分:1)

这可能适合你(GNU sed):

sed -i ':a;$!N;s/=[^\n]*\n\?/:/;ta' file

答案 3 :(得分: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:

答案 4 :(得分:0)

我的命令是

第一步:

sed's /([a-z] +)(\ =。*)/ \ 1:/ g'文件名|猫> a

cat a

存储器:

品牌:

颜色

电池:

第二步:

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

我的输出是

存储器:品牌:颜色:电池: