无法获得 sed 命令的正确输出

not able to get proper output for sed command

我有一个名为 WSH.txt 的文件,其中包含内容 -

"WSH"."WSH_INTERFACE_ERRORS"

所以我真正需要的是 - "WSH"." 应该替换为空白 space。

所以现在我创建了一个名为 sed.sh 的脚本,其中我给出了 -

SUBSTR=$(echo  | cut -d'.' -f 1)

sed -i 's/"$SUBSTR"."/ /g' 

但是当我尝试 运行 ./sed.sh WSH.txt 时,我得到了输出 -

# cat WSH.txt
"WSH"."WSH_INTERFACE_ERRORS"

(抱歉我无法在此处添加图片)

但我想要的输出是 -

WSH_INTERFACE_ERRORS

我也试过 -

sed -i 's/"${SUBSTR}"."/ /g' 

但是还是没有结果。

有人可以帮我解决这个问题吗?!
提前致谢!

编辑

我完全看错了。

假设引号在文件本身中...
该变量在单引号内,因此未被解析。

确保你也能在最后得到报价。

sed -i '/"'"$SUBSTR"'"[.]"/{ s/"//g; s/'"$SUBSTR"'[.]/ /; }' 

这将扫描匹配所需模式的行,忽略所有其他行。
在一场比赛中,它

  • 从文件中删除所有第一个 s///
  • 的 double-quotes
  • 然后关闭单曲,以便第二个 double-quotes 可以正确引用您的变量,以防嵌入 space 等,
  • 然后关闭变量后的双引号,
  • 再次打开单引号,
  • bracket-quotes你要匹配的文字点,
  • 然后结束搜索模式并将其替换为 space。

原(错误)答案


如果我没看错的话,您需要做很多工作才能做到这一点:

sed -Ei 's/[^ ]+[.]//' WSH.txt

阻止它工作的问题是双引号不匹配。您将它们作为模式的一部分包含在内。

sed -i 's/"$SUBSTR"."/ /g'  # sub "WSH"<anychar>", not what you want.
       ^  ^       ^ ^    ^

双打在单打中,因此它们作为文字字符传递给 sed。 我认为您要查找的行是其中之一:

sed -i "s/$SUBSTR[.]/ /g"  # double quotes around the whole pattern

sed -i 's/'"$SUBSTR"'[.]/ /g'  # switching quotes 

甚至,对于这种情况,

sed -i s/"$SUBSTR"'[.]/ /g'  # only quote what needs it 

无论哪种情况,您实际做的是在命令行上将模式构建为字符串,然后将其传递给 sed。引号不是 for sed - 它们是这样命令解析器在 将字符串传递给 [=16= 之前 获得正确的字符串],除非打算将它们作为模式的一部分包含在内,否则永远不会看到它们。

https://www.gnu.org/software/sed/manual/sed.html#BRE-syntaxsed BRE 语法。
https://www.gnu.org/software/sed/manual/sed.html#ERE-syntaxsed ERE 语法。
https://www.gnu.org/software/bash/manual/html_node/Quoting.htmlbash 引用。

您可以通过一条命令完成替换:

sed 's/"WSH"."/ /g' WSH.txt

输出:(SPACE)WSH_INTERFACE_ERRORS" 这不是你需要的吗?