sed
我整个早上都在尝试使用和谷歌搜索,但我似乎无法让它发挥作用。
是否有可能sed
与小写两个特定字符之间的文本:
IE
SOMENAME=WOODSTOCK,
SOMEOTHERNAME=JIMMY,
我可以吗小写 WOODSTOCK
和JIMMY
=
(对伍德斯托克和吉米)他们在和之间的基础上,
?
答案1
GNU sed 可以实现这一点。根据替换的贪婪程度选择这两种形式中的一种。
sed 's|=.*,|\L&|' file
sed 's|=[^,]*,|\L&|' file
正如手册所述, “\L
将替换内容转为小写,直到找到\U
or为止”。是正则表达式匹配的文本。\E
&
我修改了示例文件,以表明您应该明智地在贪婪=.*,
和非贪婪正则=[^,]*,
表达式之间进行选择:
$ cat file
SOMENAME=WOODSTOCK,
SOMEOTHERNAME2=JIMMY,WOODSTOCK,FINISH
$ sed 's|=.*,|\L&|' file
SOMENAME=woodstock,
SOMEOTHERNAME2=jimmy,woodstock,FINISH
$ sed 's|=[^,]*,|\L&|' file
SOMENAME=woodstock,
SOMEOTHERNAME2=jimmy,WOODSTOCK,FINISH
答案2
在任何兼容 POSIX 的平台上awk
,您可以使用该tolower()
函数
awk -v FS='=' 'BEGIN { OFS = FS } { $2 = tolower($2) }1 ' file
使用该mktemp()
函数创建一个临时文件来重定向上述命令的输出,然后重定向回原地保存。或者使用 GNU awk
>= 4.1-i inplace
POSIX 兼容版本的另一个变体,使用match()
函数可以做
awk 'match($0, /=([^,]*),/) { str = substr($0, RSTART+1, RLENGTH-2); sub(str, tolower(str)) }1'