全球主机交流论坛

标题: 有没有懂sed替换的? 只匹配字母和数字组合,不能纯数字 [打印本页]

作者: 小朋友    时间: 2022-11-29 16:26
标题: 有没有懂sed替换的? 只匹配字母和数字组合,不能纯数字
如题,我目前在用sed -i 不开启 -r 的情况下,匹配本地文本字符串替换,

具体是这样的每行
xxxxxxxxxxxx_584b284368b25bef.xxx
xxxxxxxxxxxx_0000000000000000.xxx
xxxxxxxxxxxx_aaaaaaaaaaaaaaaaa.xxx

我想替换只包含 字母和数字组合的部分,其他纯数字或纯字母的不替换。

目前用 _[a-z0-9]\{16\}\+ 把全部都替换了,我想区别替换,大佬有办法吗?


作者: whyclong    时间: 2022-11-29 16:33
提示: 作者被禁止或删除 内容自动屏蔽
作者: 小朋友    时间: 2022-11-29 16:35
whyclong 发表于 2022-11-29 16:33
有点难,这种我一般就写多几步,把纯数字和纯字母的挑出来,然后再替换。 ...

我也网上搜索也找了一遍,可能我每发现到有我这需求的,我也尝试各种组合也不行,所以才来问各位大佬了
作者: whyclong    时间: 2022-11-29 16:39
提示: 作者被禁止或删除 内容自动屏蔽
作者: adminisd    时间: 2022-11-29 16:43
哪来的这么复杂的需求,正则匹配最难的就是没有规则+不修改一部分。
先替换数字开头的,再替换字母开头的。具体自己想办法
作者: shwish    时间: 2022-11-29 16:45
你可以变通一下,我先占个楼
作者: 小朋友    时间: 2022-11-29 16:49
本帖最后由 小朋友 于 2022-11-29 16:51 编辑
adminisd 发表于 2022-11-29 16:43
哪来的这么复杂的需求,正则匹配最难的就是没有规则+不修改一部分。
先替换数字开头的,再替换字母开头的 ...


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


多分几个步骤就好了,要多不耻下问
作者: 小朋友    时间: 2022-11-29 17:05
Bai. 发表于 2022-11-29 16:57
多分几个步骤就好了,要多不耻下问

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

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

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

sed不在shell中用?
作者: zxxx    时间: 2022-11-29 17:11
给几个替换前后的例子
作者: 小朋友    时间: 2022-11-29 17:11
Bai. 发表于 2022-11-29 17:08
sed不在shell中用?

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


vscode就能写shell
我现在用的是 pycharm
作者: 小朋友    时间: 2022-11-29 17:18
zxxx 发表于 2022-11-29 17:11
给几个替换前后的例子

使用 s/_[a-z0-9]\{16\}\+\.xml$/_\*\.xml/g
替换前
  1. oem_enterprisee_8271a346c69d7ec8.xml
  2. oem_enterprisen_8271b45cc69d6527.xml
  3. oem_enterprise_06bd438c802c0bcb.xml
  4. oem_homebasice_fc44554287d37df8.xml
  5. oem_homebasicn_fc44554287d37e01.xml
  6. oem_homebasic_fc4455430aeb6f1d.xml
  7. oem_homepremiume_91f2e97ea2ab58df.xml
  8. oem_homepremiumn_91f2e83aa2ab5bb8.xml
  9. oem_homepremium_e173f2caafc9042a.xml
  10. oem_professionale_243ffb9956e51020.xml
  11. oem_professionaln_243ffbab56e50fcf.xml
  12. oem_professional_81d121edb1d7e39d.xml
  13. oem_startere_15066a04d30039cc.xml
  14. oem_startern_150668c0d3003ca5.xml
  15. oem_starter_64cdfb00df7f33cb.xml
  16. oem_ultimatee_15e51206be38a3ca.xml
  17. oem_ultimaten_15e51218be38a379.xml
  18. oem_ultimate_3a699ee899e429e3.xml
  19. _0000000000000000.xml
复制代码


替换后
  1. oem_enterprisee_*.xml
  2. oem_enterprisen_*.xml
  3. oem_enterprise_*.xml
  4. oem_homebasice_*.xml
  5. oem_homebasicn_*.xml
  6. oem_homebasic_*.xml
  7. oem_homepremiume_*.xml
  8. oem_homepremiumn_*.xml
  9. oem_homepremium_*.xml
  10. oem_professionale_*.xml
  11. oem_professionaln_*.xml
  12. oem_professional_*.xml
  13. oem_startere_*.xml
  14. oem_startern_*.xml
  15. oem_starter_*.xml
  16. oem_ultimatee_*.xml
  17. oem_ultimaten_*.xml
  18. oem_ultimate_*.xml
  19. _*.xml
复制代码


注意,原来的_0000000000000000.xml 替换成_*.xml

作者: zxxx    时间: 2022-11-29 17:21
xxxxxxxxxxxx_584b284368b25bef.xxx -> xxxxxxxxxxxx_*.xxx
xxxxxxxxxxxx_0000000000000000.xxx -> xxxxxxxxxxxx_0000000000000000.xxx
xxxxxxxxxxxx_aaaaaaaaaaaaaaaaa.xxx -> xxxxxxxxxxxx_aaaaaaaaaaaaaaaaa.xxx

这样?
作者: 小朋友    时间: 2022-11-29 18:16
zxxx 发表于 2022-11-29 17:21
xxxxxxxxxxxx_584b284368b25bef.xxx -> xxxxxxxxxxxx_*.xxx
xxxxxxxxxxxx_0000000000000000.xxx -> xxxxxxx ...

我不想替换 _0000000000000000.xxx
这种纯数字或者纯字母,只想替换这16个字包含字母和数字的组合
作者: zxxx    时间: 2022-11-29 18:19
xxxxxxxxxxxx_584b284368b25bef.xxx -> xxxxxxxxxxxx_*.xxx
xxxxxxxxxxxx_0000000000000000.xxx -> xxxxxxxxxxxx_*.xxx
xxxxxxxxxxxx_aaaaaaaaaaaaaaaaa.xxx -> xxxxxxxxxxxx_*.xxx
_0000000000000000.xml ->_0000000000000000.xml

这样?
作者: 小朋友    时间: 2022-11-29 18:20
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
这样
作者: zxxx    时间: 2022-11-29 18:45
小朋友 发表于 2022-11-29 18:20
xxxxxxxxxxxx_584b284368b25bef.xxx -> xxxxxxxxxxxx_*.xxx
xxxxxxxxxxxx_0000000000000000.xxx -> xxxxx ...

sed 可能做不了
作者: 小朋友    时间: 2022-11-29 18:59
zxxx 发表于 2022-11-29 18:45
sed 可能做不了

了解,我用其他方法了




欢迎光临 全球主机交流论坛 (https://443502.xyz/) Powered by Discuz! X3.4