sed :替换字符“A”放在字符串的一部分中并将其保留在其他部分中

发布于 2024-10-18 20:11:08 字数 508 浏览 3 评论 0原文

一切都在标题中:

这是多行文件的字符串模式:

foo_bar_alpha = "a1b2c3_cat_andthis"  
barfoo_bar_alpha = "just a int number"  
loremfoo_bar_beta = "192.168.0.0"  
... other lines come here ...

使用 sed (和/或 awk 和/或 perl),我需要用“.”替换字符“_”。 ,但仅限于字符串的第一部分,即由“=”分隔的右侧,并保留第二部分(“=”之后)。

诸如此类:

sed "s/(.*)=(.*)/ \1 with "_" replaced by "." = \2/g" < my_file
                   ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
                          how to do that ?

谢谢。

All is in the title :

here is the string pattern of a multi-line file:

foo_bar_alpha = "a1b2c3_cat_andthis"  
barfoo_bar_alpha = "just a int number"  
loremfoo_bar_beta = "192.168.0.0"  
... other lines come here ...

Using sed (and/or awk and/or perl), I need to substitute char "_" with "." , but only in the first part of the string, which is right delimited by "=", and keep the 2nd part (after "=").

Sthg like :

sed "s/(.*)=(.*)/ \1 with "_" replaced by "." = \2/g" < my_file
                   ¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
                          how to do that ?

Thx in adv.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

往日 2024-10-25 20:11:08
 awk '{gsub("_",".",$1)}1' ./infile

输入

$ cat ./infile
foo_bar_alpha = "a1b2c3_cat_andthis"
barfoo_bar_alpha = "just a int number"
loremfoo_bar_beta = "192.168.0.0"

输出

$ awk '{gsub("_",".",$1)}1' ./infile
foo.bar.alpha = "a1b2c3_cat_andthis"
barfoo.bar.alpha = "just a int number"
loremfoo.bar.beta = "192.168.0.0"

*注意:如果您确实需要在 = 上进行分隔,因为您的变量名称以某种方式包含空格(非常可疑),那么这是有效的:

awk -F= '{gsub("_",".",$1)}1' OFS="=" ./infile
 awk '{gsub("_",".",$1)}1' ./infile

Input

$ cat ./infile
foo_bar_alpha = "a1b2c3_cat_andthis"
barfoo_bar_alpha = "just a int number"
loremfoo_bar_beta = "192.168.0.0"

Output

$ awk '{gsub("_",".",$1)}1' ./infile
foo.bar.alpha = "a1b2c3_cat_andthis"
barfoo.bar.alpha = "just a int number"
loremfoo.bar.beta = "192.168.0.0"

*Note: If you for sure need to delimit on = because your variable names somehow contain spaces (highly doubtful) then this works:

awk -F= '{gsub("_",".",$1)}1' OFS="=" ./infile
多像笑话 2024-10-25 20:11:08

粗略但有效:

sed 'h;s/.*=/=/;x;s/=.*//;s/_/\./g;G;s/\n//' filename

Crude but effective:

sed 'h;s/.*=/=/;x;s/=.*//;s/_/\./g;G;s/\n//' filename
絕版丫頭 2024-10-25 20:11:08

使用 awk 代替 sed

awk 'BEGIN{OFS=FS="="}{gsub("_",".",$1)}1' file

ruby -F"=" -ane '$F[0].gsub!(/_/,".");print $F.join("=")' file

use awk instead of sed

awk 'BEGIN{OFS=FS="="}{gsub("_",".",$1)}1' file

ruby -F"=" -ane '$F[0].gsub!(/_/,".");print $F.join("=")' file
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文