我的文件包含(推特)这样的推文:
GP 02\/14: POP LOH!!! ^^ Photo credits: @joleneqjm @ Marina Floating Platform
我需要将推文转换为小写以减少词汇量。但我不想将POP转换为pop,因为POP是首字母缩略词,具有特殊意义。
所以期望的输出是:
GP 02\/14: POP LOH!!! ^^ photo credits: @joleneqjm @ marina floating platform
有没有办法以单行方式使用sed或任何其他bash工具实现这一目标?
答案 0 :(得分:0)
你可以试试下面的sed命令,
sed -r 's/\b([A-Z][a-z]+)/\L\1/g' file
OR
sed -r 's/\b([a-zA-Z]*([A-Z][a-z]|[a-z][A-Z])[A-Za-z]*)\b/\L\1/g' file
上面的sed命令将捕获以大写字母和后面的一个或多个小写字母开头的单词。然后将捕获的组内的字符转换为小写将为您提供所需的输出。
答案 1 :(得分:0)
这是一个awk
解决方案。它会从6
字段开始将所有内容更改为小写。
cat file
GP 02\/14: POP LOH!!! ^^ Photo credits: @joleneqjm @ A NICE Marina Floating Platform
awk '{for (i=6;i<=NF;i++) $i=tolower($i)}1' file
GP 02\/14: POP LOH!!! ^^ photo credits: @joleneqjm @ a nice marina floating platform
它会将包含单个字符I am
的字词,包含全部大写NICE
的字词和包含此GoPro
的字词更改为:i am
,nice
和{{1 }}
答案 2 :(得分:0)
这可能适合你(GNU sed):
sed -r 's/((\<[A-Z]+\>\W*)*)(\w+)/\1\L\3/g' file
这样就会留下大写单词和小写字样。