我有一个包含类似列表的文本文件
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
打印,但没有成功。
您可以分两步完成:首先,重复大写的单词,其次,将冒号后面剩余的字母大写。不能超过 2 个字。
sed -E 's/(.*)/'\''\1'\'':'\''\u\1'\'';/;
s/(:.*_)([a-z])/\1\u\2/'