[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 请教一个sed命令的用法

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

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

本帖最后由 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"
复制代码

TOP

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

回复 2# aloha20200628

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

echo "+*#abc123.xyz456.789def"
就是把问题转换成 把非英语字母和数字替不包括.换掉,成为abc123.xyz456.789def

TOP

本帖最后由 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"
复制代码

TOP

本帖最后由 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

TOP

本帖最后由 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
复制代码

TOP

本帖最后由 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
复制代码

TOP

回复 7# aloha20200628

好的,我去试一下,谢谢

TOP

返回列表