sed 向自身追加一行或 awk $0 等价物?

问题描述 投票:0回答:1

我有一个包含类似列表的文本文件

name
surname
office
address
home_phone
office_phone
my_other_value

我想把它改成

'name':'Name';
'surname':'Surname';
'office':'Office';
'address':'Address';
'home_phone':'Home_Phone';
'office_phone':'Office_Phone';
'my_other_value:'My_Other_Value';

我尝试用

sed
oneliner 来做到这一点,我可以毫无问题地更换外壳

sed -r 's/(\b|_)([a-z])/\1\U\2/g' /tmp/list

但是如何在其自身之前打印未修改的行,就像使用 Awk 执行

"print $0"
那样?

我这样做了,但有点脏

while read line; do echo -ne "'$line':"; echo "'$line';" | sed -r 's/(\b|_)([a-z])/\1\U\2/g'; done < <(cat /tmp/list)

尝试了一些

sed
打印,但没有成功。

shell awk sed
1个回答
0
投票

您可以分两步完成:首先,重复大写的单词,其次,将冒号后面剩余的字母大写。不能超过 2 个字。

sed -E 's/(.*)/'\''\1'\'':'\''\u\1'\'';/;
        s/(:.*_)([a-z])/\1\u\2/' 
© www.soinside.com 2019 - 2024. All rights reserved.