如何解决无法为sed命令获得正确的输出
我有一个名为WSH.txt
的文件,其中包含内容-
"WSH"."WSH_INTERFACE_ERRORS"
因此,在这里我真正需要的是-"WSH"."
应该被空格代替。
因此,现在我创建了一个名为sed.sh
的脚本,在其中给出了-
SUBSTR=$(echo $1 | cut -d'.' -f 1)
sed -i 's/"$SUBSTR"."/ /g' $1
但是当我尝试运行./sed.sh WSH.txt
时,我会得到输出-
# cat WSH.txt
"WSH"."WSH_INTERFACE_ERRORS"
(抱歉,我无法在此处添加图片)
但是我想要的输出是-
WSH_INTERFACE_ERRORS
我也尝试过-
sed -i 's/"${SUBSTR}"."/ /g' $1
但是仍然没有给出结果。
有人可以帮我吗?!
预先感谢!
解决方法
编辑
我读错了。
假设引号在文件本身中...
该变量位于单引号内,因此无法解析。
请确保在结尾处也引用报价。
sed -i '/"'"$SUBSTR"'"[.]"/{ s/"//g; s/'"$SUBSTR"'[.]/ /; }' $1
这将扫描匹配所需模式的行,而忽略所有其他行。
在比赛中,它
- 从文件的第一个s /// 中消除所有双引号
- 然后关闭单引号,以便第二个双引号可以正确地引用您的变量,以防出现嵌入的空格等情况,
- 然后在变量后关闭双引号
- 再次打开单引号,
- 用括号括起要匹配的文字点,
- 然后结束搜索模式,并将其替换为空格。
原始答案(错误)
如果我没看错的话,您正在做很多工作来做到这一点:
sed -Ei 's/[^ ]+[.]//' WSH.txt
阻止其工作的问题是不匹配的双引号。您将它们包括在模式中。
sed -i 's/"$SUBSTR"."/ /g' $1 # sub "WSH"<anychar>",not what you want.
^ ^ ^ ^ ^
双打位于单打内部,因此它们作为原义字符传递给sed。 我认为您要寻找的线是其中之一:
sed -i "s/$SUBSTR[.]/ /g" $1 # double quotes around the whole pattern
或
sed -i 's/'"$SUBSTR"'[.]/ /g' $1 # switching quotes
甚至在这种情况下
sed -i s/"$SUBSTR"'[.]/ /g' $1 # only quote what needs it
在任何一种情况下,您实际上所做的是在命令行上将模式构建为字符串,然后将其传递给sed
。引号不是 sed
的引号,因此引号解析器会在将字符串传递给sed
之前在 之前获取正确的字符串,这应该永远不会出现除非它们是预期要包含在模式中的。
https://www.gnu.org/software/sed/manual/sed.html#BRE-syntax是sed
BRE语法。
https://www.gnu.org/software/sed/manual/sed.html#ERE-syntax是sed
ERE语法。
https://www.gnu.org/software/bash/manual/html_node/Quoting.html是bash
引用。
您可以用一个命令进行替换:
sed 's/"WSH"."/ /g' WSH.txt
输出:(SPACE)WSH_INTERFACE_ERRORS“ 那不是您所需要的吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。