1

以下のようなファイルがあります。

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

すべての行について、すべてを削除したいと思い=ます=

最終的に、私は次のようなものを取得したい:

memory:brand:color:battery: 

(すべての単語の後にコロンを付けて 1 行にまとめる)

使用できる 1 行の 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

これはあなたのために働くかもしれません(GNU sed):

sed -i ':a;$!N;s/=[^\n]*\n\?/:/;ta' file
于 2012-09-26T05:50:11.990 に答える
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
于 2012-09-26T04:56:55.833 に答える
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 に答える
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 に答える