是否有一种方法来重现SED字符串替换使用管道操作符在批处理?



我有下面的命令,它产生一个SHA256哈希字符串,我在一个FOR IN循环中使用批处理。我注意到,不同版本的certutils会导致一些输出被空格分割成&;ab; 7e; eg;而不是连续的字符串。我正在寻找一种方法来更新我的脚本,以删除额外的管道操作中的空间。不幸的是,SED不能在批处理中本地工作,并且超出了我的范围。

CertUtil -hashfile SomeFile.txt sha256 | findstr /v "hash" | sed s/ *//g

我试过使用set str=%str: =%,但是我还没有得到语法在我的大脚本中正常工作。如果可能的话,我希望在额外的管道操作符步骤中工作,而不是包括变量。

根据我之前的评论,在你之前的问题中:

@(For /F "Delims=" %%G In ('%SystemRoot%System32certutil.exe -HashFfle "SomeFile.txt" SHA256 2^>NUL ^| %SystemRoot%System32find.exe /V ":"') Do @Set "hash=%%G" & SetLocal EnableDelayedExpansion & For %%H In ("!hash: =!") Do @EndLocal & Echo=%%~H) & Pause

不熟悉CertUtil或findstr,但如果您想要的只是从文本行中删除空格,如&;ab 7e eg et cc…&;那么下面的代码就可以工作了(正斜杠转义sed中的空格)

echo "ab 7e eg et cc" | sed 's/ //g'

ab7eegetcc

基于在shell脚本中将一个子字符串替换为另一个字符串,您可以使用:

echo 'a b c' | while read line; do echo ${line// /}; done

底层特性(shell参数扩展)记录在https://www.gnu.org/software/bash/manual/bash.html#Shell-Parameter-Expansion(搜索${parameter//pattern/string})中。

最新更新