我的文件格式为:
EMPLOYEE
FIRST NAME: JOHN
LAST NAME: DOE
POSITION: ACCOUNT MANAGER
EMPLOYEE
FIRST NAME: BIG
LAST NAME: BOSS
POSITION: CEO
嗯,比这更复杂一点,但有一个解决方案就足够了。
我尝试将大小写固定为标题大小写,同时保持对齐方式和字段名称不变:
EMPLOYEE
FIRST NAME: John
LAST NAME: Doe
POSITION: Account Manager
EMPLOYEE
FIRST NAME: Big
LAST NAME: Boss
POSITION: CEO
到目前为止我已经使用过这个:
sed -E '/^\s{0,}(FIRST NAME|LAST NAME|POSITION)/ { s/((^\s{0,})(FIRST NAME|LAST NAME|POSITION))/\1/; T; s/(\b[A-Za-z])([A-Za-z]*)\b/\U\1\L\2/g; }' employees.list
但似乎无法避免更改字段名称的大小写(名字,姓氏,职位),所以这些变成:
EMPLOYEE
First Name: John
Last Name: Doe
Position: Account Manager
EMPLOYEE
First Name: Big
Last Name: Boss
Position: Ceo
(还没去处理
CEO
这样的内容)。
这可以通过
sed
实现吗?如果是的话,怎么办?
{0,}
??只是*
。
真正困难的是你想在字符串的part上应用“第一个大写其余小写”正则表达式。我通常做的是将部分输入放入由换行符分隔的旧空间中,然后将其删除。然后我可以处理有趣的部分,最后
h
占据保留空间并重新整理输出。g
输出:
sed -E '
/: CEO/{p;d}
/^(\s*(FIRST NAME|LAST NAME|POSITION):\s*)/{
s//\1\n/
h
s///
s/\b([A-Za-z])([A-Za-z]*)\b/\U\1\L\2/g
G
s/([^\n]*)\n([^\n]*).*/\2\1/
}
'
总的来说,考虑一种真正的编程语言,更像是
EMPLOYEE
FIRST NAME: John
LAST NAME: Doe
POSITION: Account Manager
EMPLOYEE
FIRST NAME: Big
LAST NAME: Boss
POSITION: CEO
或
awk
等