有没有懂sed替换的? 只匹配字母和数字组合,不能纯数字

59次阅读

共计 3323 个字符,预计需要花费 9 分钟才能阅读完成。

如题,我目前在用 sed -i 不开启 -r 的情况下,匹配本地文本字符串替换,
具体是这样的每行
xxxxxxxxxxxx_584b284368b25bef.xxx
xxxxxxxxxxxx_0000000000000000.xxx
xxxxxxxxxxxx_aaaaaaaaaaaaaaaaa.xxx
我想替换只包含 字母和数字组合的部分,其他纯数字或纯字母的不替换。
目前用 _[a-z0-9]{16}+ 把全部都替换了,我想区别替换,大佬有办法吗?

哪来的这么复杂的需求,正则匹配最难的就是没有规则 + 不修改一部分。
先替换数字开头的,再替换字母开头的。具体自己想办法有点难,这种我一般就写多几步,把纯数字和纯字母的挑出来,然后再替换。

whyclong 发表于 2022-11-29 16:33
有点难,这种我一般就写多几步,把纯数字和纯字母的挑出来,然后再替换。…

我也网上搜索也找了一遍,可能我每发现到有我这需求的,我也尝试各种组合也不行,所以才来问各位大佬了非纯数字 and 非纯字母 这样替换也许可以你可以变通一下,我先占个楼

adminisd 发表于 2022-11-29 16:43
哪来的这么复杂的需求,正则匹配最难的就是没有规则 + 不修改一部分。
先替换数字开头的,再替换字母开头的 …

哎,现在去各种群请教所谓的大佬,个个说得简单,都是说先这样,先那样,就是没有给你示例。我都失望了

小朋友 发表于 2022-11-29 16:49
哎,现在去各种群请教所谓的大佬,个个说得简单,都是说先这样,先那样,就是没有给你示例。我都失望了 …

多分几个步骤就好了,要多不耻下问

Bai. 发表于 2022-11-29 16:57
多分几个步骤就好了,要多不耻下问

也可以,我先匹到纯数字或者纯字母的打乱,让后面替换字母和数字组合无法匹配到,待字母和数字组合的替换完成,再恢复这 纯数字或者纯字母的。
只是这样就不够明智简短。n=0
for 文本第 n 行
过滤匹配中间那段
如果 文本中间那段内容全相同
n=n+1
进入下个循环
否则替换中间那段

Bai. 发表于 2022-11-29 17:06
n=0
for 文本第 n 行
过滤匹配中间那段

只能在 sed 通过正则实现,不借助其他命令。

小朋友 发表于 2022-11-29 17:07
只能在 sed 通过正则实现,不借助其他命令。

sed 不在 shell 中用?给几个替换前后的例子

Bai. 发表于 2022-11-29 17:08
sed 不在 shell 中用?

我这是在 windows 环境下,使用的 sed.exe,所以这就难办了

小朋友 发表于 2022-11-29 17:11
我这是在 windows 环境下,使用的 sed.exe,所以这就难办了

vscode 就能写 shell
我现在用的是 pycharm

zxxx 发表于 2022-11-29 17:11
给几个替换前后的例子

使用 s/_[a-z0-9]{16}+.xml$/_*.xml/g
替换前
oem_enterprisee_8271a346c69d7ec8.xml
oem_enterprisen_8271b45cc69d6527.xml
oem_enterprise_06bd438c802c0bcb.xml
oem_homebasice_fc44554287d37df8.xml
oem_homebasicn_fc44554287d37e01.xml
oem_homebasic_fc4455430aeb6f1d.xml
oem_homepremiume_91f2e97ea2ab58df.xml
oem_homepremiumn_91f2e83aa2ab5bb8.xml
oem_homepremium_e173f2caafc9042a.xml
oem_professionale_243ffb9956e51020.xml
oem_professionaln_243ffbab56e50fcf.xml
oem_professional_81d121edb1d7e39d.xml
oem_startere_15066a04d30039cc.xml
oem_startern_150668c0d3003ca5.xml
oem_starter_64cdfb00df7f33cb.xml
oem_ultimatee_15e51206be38a3ca.xml
oem_ultimaten_15e51218be38a379.xml
oem_ultimate_3a699ee899e429e3.xml
_0000000000000000.xml 复制代码
替换后
oem_enterprisee_*.xml
oem_enterprisen_*.xml
oem_enterprise_*.xml
oem_homebasice_*.xml
oem_homebasicn_*.xml
oem_homebasic_*.xml
oem_homepremiume_*.xml
oem_homepremiumn_*.xml
oem_homepremium_*.xml
oem_professionale_*.xml
oem_professionaln_*.xml
oem_professional_*.xml
oem_startere_*.xml
oem_startern_*.xml
oem_starter_*.xml
oem_ultimatee_*.xml
oem_ultimaten_*.xml
oem_ultimate_*.xml
_*.xml 复制代码
注意,原来的_0000000000000000.xml 替换成_*.xmlxxxxxxxxxxxx_584b284368b25bef.xxx -> xxxxxxxxxxxx_*.xxx
xxxxxxxxxxxx_0000000000000000.xxx -> xxxxxxxxxxxx_0000000000000000.xxx
xxxxxxxxxxxx_aaaaaaaaaaaaaaaaa.xxx -> xxxxxxxxxxxx_aaaaaaaaaaaaaaaaa.xxx
这样?

zxxx 发表于 2022-11-29 17:21
xxxxxxxxxxxx_584b284368b25bef.xxx -> xxxxxxxxxxxx_*.xxx
xxxxxxxxxxxx_0000000000000000.xxx -> xxxxxxx …

我不想替换 _0000000000000000.xxx
这种纯数字或者纯字母,只想替换这 16 个字包含字母和数字的组合 xxxxxxxxxxxx_584b284368b25bef.xxx -> xxxxxxxxxxxx_*.xxx
xxxxxxxxxxxx_0000000000000000.xxx -> xxxxxxxxxxxx_*.xxx
xxxxxxxxxxxx_aaaaaaaaaaaaaaaaa.xxx -> xxxxxxxxxxxx_*.xxx
_0000000000000000.xml ->_0000000000000000.xml
这样?

zxxx 发表于 2022-11-29 18:19
xxxxxxxxxxxx_584b284368b25bef.xxx -> xxxxxxxxxxxx_*.xxx
xxxxxxxxxxxx_0000000000000000.xxx -> xxxxxxx …

xxxxxxxxxxxx_584b284368b25bef.xxx -> xxxxxxxxxxxx_*.xxx
xxxxxxxxxxxx_0000000000000000.xxx -> xxxxxxxxxxxx_0000000000000000.xxx
xxxxxxxxxxxx_aaaaaaaaaaaaaaaaa.xxx -> xxxxxxxxxxxx_aaaaaaaaaaaaaaaaa.xxx
这样

小朋友 发表于 2022-11-29 18:20
xxxxxxxxxxxx_584b284368b25bef.xxx -> xxxxxxxxxxxx_*.xxx
xxxxxxxxxxxx_0000000000000000.xxx -> xxxxx …

sed 可能做不了

zxxx 发表于 2022-11-29 18:45
sed 可能做不了

了解,我用其他方法了

正文完
 0