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

[问题求助] PowerShell如何用正则取=后面的字符?

[复制链接]
发表于 2021-10-31 17:42:44 | 显示全部楼层
回复 15# 5i365
  1. ((type test.txt) -match "_[$](abctitle|cdectitl)_") -replace "^.*=",""
复制代码

评分

参与人数 1技术 +1 收起 理由
5i365 + 1 不错

查看全部评分

 楼主| 发表于 2021-10-31 17:44:28 | 显示全部楼层
回复 16# idwma


    输出值是:

_$abctitle_澶т腑鍥?灏忔棩鏈? 缇庡浗浣?
_$cdectitl_澶т腑鍗?灏忔棩鏈? 鑻卞浗浣?
发表于 2021-10-31 17:53:10 | 显示全部楼层
本帖最后由 idwma 于 2021-10-31 18:28 编辑

回复 17# 5i365

测了是可以的呀
 楼主| 发表于 2021-10-31 18:39:37 | 显示全部楼层
回复 18# idwma


    刚试了一下, 要把test.txt的编码格式改为ansi 才可以

感觉可能还有更简单的办法
 楼主| 发表于 2021-10-31 18:42:02 | 显示全部楼层
回复 18# idwma


    用这种办法 我需要先把_$abctitle_ 先改成 _[$](abctitle)_  这样才可以
发表于 2021-10-31 21:28:16 | 显示全部楼层

串个频道

本帖最后由 523066680 于 2021-10-31 22:03 编辑
  1. use utf8;
  2. use Encode;
  3. my $str='
  4. _$abctitle_大中国=小日本, 美国佬!
  5. _$cdectitl_大中华=小日本, 英国佬!';

  6. while ( $str =~ /_\$\w+_[^=]*=(.+)$/gm) { print encode('gbk', $1),"\n" }
复制代码
Perl, 保存为 utf-8 执行

结果按GBK输出
  1. 小日本, 美国佬!
  2. 小日本, 英国佬!
复制代码
 楼主| 发表于 2021-11-1 06:45:32 | 显示全部楼层
回复 21# 523066680


    牛, 如果能在Powershell中用正则直接取就好了
发表于 2021-11-1 09:50:34 | 显示全部楼层
回复 1# 5i365


http://bcn.bathome.net/s/tool/index.html?key=sed
  1. type 1.txt | find "_$abctitle_" | sed "s/.*=//" >2.txt
  2. type 1.txt | find "_$cdectitl_" | sed "s/.*=//" >3.txt
复制代码
发表于 2021-11-1 09:51:28 | 显示全部楼层
回复 1# 5i365


2.bat
  1. @echo off
  2. for /f "tokens=2 delims==" %%i in ('type 1.txt ^| find "_$abctitle_"') do (
  3.     set "str1=%%i"
  4. )
  5. for /f "tokens=2 delims==" %%i in ('type 1.txt ^| find "_$cdectitl_"') do (
  6.     set "str2=%%i"
  7. )
  8. echo,%str1%
  9. echo,%str2%
  10. pause
复制代码

评分

参与人数 1技术 +1 收起 理由
5i365 + 1 牛X

查看全部评分

 楼主| 发表于 2021-11-1 10:07:20 | 显示全部楼层
回复 24# Batcher


    如何在ps下使用cmd取值, 下面的方法, 取不到
cmd /c "for /f "tokens=2 delims==" %%i in ('type 1.txt ^| find "_$abctitle_"') do ( echo%%i)"
发表于 2021-11-1 10:37:27 | 显示全部楼层
本帖最后由 523066680 于 2021-11-1 13:10 编辑

'$abctitle' 字面强行保留原样(还是perl)
  1. my $k1 = '$abctitle';
  2. my $k2 = '$cdectitl';
  3. while ( $str =~ /_(?:\Q$k1\E|\Q$k2\E)_[^=]*=(.+)$/gm) { print encode('gbk', $1),"\n" }
复制代码
或者在 $ 前面加斜杠,起码没有把它们从字面上拆开或者从中间插入其他符号
  1. while ( $str =~ /_(?:\$abctitle|\$cdectitl)_[^=]*=(.+)$/gm) { print encode('gbk', $1),"\n" }
复制代码
发表于 2021-11-1 11:35:37 | 显示全部楼层
test.txt(简中编码):
_$abctitle_大中国=小日本, 美国佬!
_$cdectitl_大中华=小日本, 英国佬!

在powershell命令行运行代码如下:
foreach ($t in type 'test.txt') {$t=($t -replace '.*=');Write-Host $t;}
屏显运行结果:
小日本, 美国佬!
小日本, 英国佬!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 05:37 , Processed in 0.027514 second(s), 12 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表