使用 sed 在特定模式之间进行替换

Woo*_*ock 4 linux sed string text-processing

sed整个上午都在尝试和谷歌搜索,但我似乎无法让它发挥作用。

是否有可能与sed小写两个特定字符之间的文本:

IE

SOMENAME=WOODSTOCK,
SOMEOTHERNAME=JIMMY,
Run Code Online (Sandbox Code Playgroud)

我可以小写 WOODSTOCKJIMMY(对伍德斯托克和吉米),因为它们介于=和之间,

Qua*_*odo 5

使用 GNU sed 是可能的。根据替换的贪婪程度选择这两种形式之一。

sed 's|=.*,|\L&|' file
sed 's|=[^,]*,|\L&|' file
Run Code Online (Sandbox Code Playgroud)

正如手册所述,“\L将替换变为小写,直到找到a\U\E”。&是正则表达式匹配的文本。


我修改了示例文件以表明您应该明智地在 geedy=.*,和 non-greedy 正则=[^,]*,表达式之间进行选择:

$ 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
Run Code Online (Sandbox Code Playgroud)