Board logo

标题: [文本处理] 请教一个sed命令的用法 [打印本页]

作者: netdzb    时间: 3 天前 16:31     标题: 请教一个sed命令的用法

需要得到的结果是www.cyndi.com,可惜代码出了问题了啊

echo "中文测试字符串www.cyndi.com" | sed -n 's/.*([a-zA-Z]\.[a-zA-Z][a-zA-Z]$)/\1/p'
作者: aloha20200628    时间: 3 天前 18:32

本帖最后由 aloha20200628 于 2025-3-31 18:44 编辑

回复 1# netdzb

删除字符串中的所有中文字符,采用 sed.exe v4.9(本坛第三方下载)
  1. echo,"中文测试字符串www.cyndi.com"|sed -C -r "s/[\x81-\xFE][\x40-\xFE]//g"
复制代码

作者: netdzb    时间: 3 天前 20:14

本帖最后由 netdzb 于 2025-3-31 20:41 编辑

回复 2# aloha20200628

能换个写法吗?试了一下,不成功啊!

echo "+*#abc123.xyz456.789def"
就是把问题转换成 把非英语字母和数字替不包括.换掉,成为abc123.xyz456.789def
作者: aloha20200628    时间: 3 天前 21:08

本帖最后由 aloha20200628 于 2025-3-31 21:23 编辑

回复 3# netdzb
  1. echo,"+*#abc123.xyz456.789def"|sed -r "s/[^0-9\.a-z]//ig"
复制代码
或者采用以下的二合一句式亦可》剔除字符串包含的中文字符和数字.英文字母以外的字符,但须确保当前码页是 936 码页...
  1. echo,"自行车+*#abc123.xyz456.789def坦克车"|sed -C -r "s/[^0-9\.a-z]|([\x81-\xFE][\x40-\xFE])//ig"
复制代码

作者: netdzb    时间: 前天 11:27

本帖最后由 netdzb 于 2025-4-1 12:09 编辑

回复 4# aloha20200628

还差一点点,帮忙改一下

echo "中文测试字符串www.cynidi.com" | sed -r -n 's/.*([a-zA-Z0-9]+\.[a-zA-Z0-9]+\.[a-zA-Z]+)$/\1/p'

echo "@#=www.cynidi.com" | sed -r -n 's/.*([a-zA-Z0-9]+\.[a-zA-Z0-9]+\.[a-zA-Z0-9]+)$/\1/p'


上面连个命令的输出均为



w.cynidi.com
作者: aloha20200628    时间: 前天 12:13

本帖最后由 aloha20200628 于 2025-4-1 15:36 编辑

回复 5# netdzb

以下代码存为 test.bat 运行...
  1. @echo off &chcp 936>nul
  2. for %%s in (
  3.    "@#=www.cynidi.com"
  4.    "中文测试字符串www.cynidi.com"
  5.    "+*#abc123.xyz456.789def"
  6. ) do echo,%%s|sed -C -r "s/[^0-9\.a-z]|([\x81-\xFE][\x40-\xFE])//ig"
  7. pause&exit/b
复制代码
因 for %%s in (...) do 句式会自动匹配循环变量值中的 *? 通配符,故以上代码须订正如下...
  1. @echo off &chcp 936>nul
  2.    echo,"@#=www.cynidi.com"|sed -C -r "s/[^0-9\.a-z]|([\x81-\xFE][\x40-\xFE])//ig"
  3.    echo,"中文测试字符串www.cynidi.com"|sed -C -r "s/[^0-9\.a-z]|([\x81-\xFE][\x40-\xFE])//ig"
  4.    echo,"+*#abc123.xyz456.789def"|sed -C -r "s/[^0-9\.a-z]|([\x81-\xFE][\x40-\xFE])//ig"
  5. pause&exit/b
复制代码

作者: aloha20200628    时间: 前天 15:28

本帖最后由 aloha20200628 于 2025-4-1 15:38 编辑

回复 5# netdzb

再给一个在 936 码页(简中编码)和 65001 码页(utf-8编码)下均可成功运行的 sed 句式 》剔除字符串包含的中文字符和数字.英文字母以外的字符...
  1. @echo off
  2.    echo,"@#=www.cynidi.com"|sed -C -r "s/[^\x00-\x7F]|[^a-z\.0-9]//ig"
  3.    echo,"中文测试字符串www.cynidi.com"|sed -C -r "s/[^\x00-\x7F]|[^a-z\.0-9]//ig"
  4.    echo,"+*#中文abc123.xyz456.789def"|sed -C -r "s/[^\x00-\x7F]|[^a-z\.0-9]//ig"
  5. pause&exit/b
复制代码

作者: netdzb    时间: 昨天 07:41

回复 7# aloha20200628

好的,我去试一下,谢谢




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2