sed 没有给我两个文件相同的值
sed doesn't give me the same value two files
我注意到 sed 没有给我相同的输出
NOD=$(sed -n '/uid=/{s/.*uid=//;p;}' /home/user/config.xml | tail -c +2 | rev | cut -c6- | rev)
文件包含:
<gateway ws="ws://1.1.1.23:8333" uid="123B0X3C"/>
结果是 123B0X3C,但是当我尝试另一个端点时
<gateway ws="ws://1.1.1.23:8333" uid="1541CCF5"/>
结果是 1541CCF
为什么?
想法是在没有“”和结束标记字符的 uid 选项中获取该数字
您可以为此使用单个 sed
:
NOD=$(sed -n 's/.*uid="\([^"]*\).*//p' /home/user/config.xml)
这里,
-n
- 抑制默认行输出
.*uid="\([^"]*\).*
- 查找任何文本,uid="
文本,然后将 "
字符以外的任何零个或多个字符捕获到组 1 中,然后匹配字符串的其余部分
</code> - 将匹配的行替换为第 1 组值</li>
<li><code>p
- p
打印成功替换的结果。
看到一个 online demo:
#!/bin/bash
s='<gateway ws="ws://1.1.1.23:8333" uid="123B0X3C"/>'
NOD=$(sed -n 's/.*uid="\([^"]*\).*//p' <<< "$s")
echo "$NOD"
## => 123B0X3C
这可以简单地完成 awk
。使用您显示的示例,请尝试遵循 awk
代码。简单的解释是,将所有行的字段分隔符设置为 uid="
或 "/>
,然后打印该行的第二个字段。
awk -F'uid="|"/>' 'NF>=2{print }' Input_file
这有效
NOD=$(sed -n 's/.*uid="\([^"]*\).*//p' /home/user/config.xml)
但我很好奇为什么那不起作用。
当我检查变量的长度时,它显示 8,但回显只显示 7 个字符。
当我将结果移动到文件和 wc -c 时,它得到 15 和 14 个字符(一个文件和另一个文件)。我检查了空格,但配置是一样的。
我注意到 sed 没有给我相同的输出
NOD=$(sed -n '/uid=/{s/.*uid=//;p;}' /home/user/config.xml | tail -c +2 | rev | cut -c6- | rev)
文件包含:
<gateway ws="ws://1.1.1.23:8333" uid="123B0X3C"/>
结果是 123B0X3C,但是当我尝试另一个端点时
<gateway ws="ws://1.1.1.23:8333" uid="1541CCF5"/>
结果是 1541CCF
为什么?
想法是在没有“”和结束标记字符的 uid 选项中获取该数字
您可以为此使用单个 sed
:
NOD=$(sed -n 's/.*uid="\([^"]*\).*//p' /home/user/config.xml)
这里,
-n
- 抑制默认行输出.*uid="\([^"]*\).*
- 查找任何文本,uid="
文本,然后将"
字符以外的任何零个或多个字符捕获到组 1 中,然后匹配字符串的其余部分</code> - 将匹配的行替换为第 1 组值</li> <li><code>p
-p
打印成功替换的结果。
看到一个 online demo:
#!/bin/bash
s='<gateway ws="ws://1.1.1.23:8333" uid="123B0X3C"/>'
NOD=$(sed -n 's/.*uid="\([^"]*\).*//p' <<< "$s")
echo "$NOD"
## => 123B0X3C
这可以简单地完成 awk
。使用您显示的示例,请尝试遵循 awk
代码。简单的解释是,将所有行的字段分隔符设置为 uid="
或 "/>
,然后打印该行的第二个字段。
awk -F'uid="|"/>' 'NF>=2{print }' Input_file
这有效
NOD=$(sed -n 's/.*uid="\([^"]*\).*//p' /home/user/config.xml)
但我很好奇为什么那不起作用。 当我检查变量的长度时,它显示 8,但回显只显示 7 个字符。 当我将结果移动到文件和 wc -c 时,它得到 15 和 14 个字符(一个文件和另一个文件)。我检查了空格,但配置是一样的。