sed 无意中擦除行的剩余部分
sed unintentionally wipes remainder of line
正在尝试在文件中查找各种类似事件。
<address DOMAIN='0x000' bus='PCOIP_USB0' slot='0x00' function '0x0' />
<address DOMAIN='0x000' bus='PCOIP_USB1' slot='0x00' function '0x0' />
<address DOMAIN='0x000' bus='PCOIP_USB7' slot='0x00' function '0x0' />
<address type='bmu' domain='0x000' bus='PCOIP_USB9' slot='0x00' function '0x0' />
<address DOMAIN='0x000' bus='PCOIP_USB4' slot='0x00' function '0x0' />
我正在 尝试 简单地定位任何以 PCOIP_
开头的实例并将该字符串替换为 0x86
结果 将如下所示:
<address DOMAIN='0x000' bus='0x86' slot='0x00' function '0x0' />
<address DOMAIN='0x000' bus='0x86' slot='0x00' function '0x0' />
<address DOMAIN='0x000' bus='0x86' slot='0x00' function '0x0' />
<address type='bmu' domain='0x000' bus='0x86' slot='0x00' function '0x0' />
<address DOMAIN='0x000' bus='0x86' slot='0x00' function '0x0' />
我目前正在尝试的命令处理替换必要的字符串,除了它还会擦除整行的其余部分:
sed s/PCOIP_\(.*\)/0x86/g' file
命令原样使文件看起来像:
<address DOMAIN='0x000' bus='0x86
<address DOMAIN='0x000' bus='0x86
<address DOMAIN='0x000' bus='0x86
<address type='bmu' domain='0x000' bus='0x86
<address DOMAIN='0x000' bus='0x86
您可以使用
sed "s/PCOIP_[^']*/0x86/g" file
此处,PCOIP_[^']*
匹配 PCOIP_
,然后匹配 '
字符以外的任何零个或多个字符。整个匹配替换为 0x86
子字符串。
查看在线演示:
#!/bin/bash
s="<address DOMAIN='0x000' bus='PCOIP_USB0' slot='0x00' function '0x0' />
<address DOMAIN='0x000' bus='PCOIP_USB1' slot='0x00' function '0x0' />
<address DOMAIN='0x000' bus='PCOIP_USB7' slot='0x00' function '0x0' />
<address type='bmu' domain='0x000' bus='PCOIP_USB9' slot='0x00' function '0x0' />
<address DOMAIN='0x000' bus='PCOIP_USB4' slot='0x00' function '0x0' />"
sed "s/PCOIP_[^']*/0x86/g" <<< "$s"
输出:
<address DOMAIN='0x000' bus='0x86' slot='0x00' function '0x0' />
<address DOMAIN='0x000' bus='0x86' slot='0x00' function '0x0' />
<address DOMAIN='0x000' bus='0x86' slot='0x00' function '0x0' />
<address type='bmu' domain='0x000' bus='0x86' slot='0x00' function '0x0' />
<address DOMAIN='0x000' bus='0x86' slot='0x00' function '0x0' />
正在尝试在文件中查找各种类似事件。
<address DOMAIN='0x000' bus='PCOIP_USB0' slot='0x00' function '0x0' />
<address DOMAIN='0x000' bus='PCOIP_USB1' slot='0x00' function '0x0' />
<address DOMAIN='0x000' bus='PCOIP_USB7' slot='0x00' function '0x0' />
<address type='bmu' domain='0x000' bus='PCOIP_USB9' slot='0x00' function '0x0' />
<address DOMAIN='0x000' bus='PCOIP_USB4' slot='0x00' function '0x0' />
我正在 尝试 简单地定位任何以 PCOIP_
开头的实例并将该字符串替换为 0x86
结果 将如下所示:
<address DOMAIN='0x000' bus='0x86' slot='0x00' function '0x0' />
<address DOMAIN='0x000' bus='0x86' slot='0x00' function '0x0' />
<address DOMAIN='0x000' bus='0x86' slot='0x00' function '0x0' />
<address type='bmu' domain='0x000' bus='0x86' slot='0x00' function '0x0' />
<address DOMAIN='0x000' bus='0x86' slot='0x00' function '0x0' />
我目前正在尝试的命令处理替换必要的字符串,除了它还会擦除整行的其余部分:
sed s/PCOIP_\(.*\)/0x86/g' file
命令原样使文件看起来像:
<address DOMAIN='0x000' bus='0x86
<address DOMAIN='0x000' bus='0x86
<address DOMAIN='0x000' bus='0x86
<address type='bmu' domain='0x000' bus='0x86
<address DOMAIN='0x000' bus='0x86
您可以使用
sed "s/PCOIP_[^']*/0x86/g" file
此处,PCOIP_[^']*
匹配 PCOIP_
,然后匹配 '
字符以外的任何零个或多个字符。整个匹配替换为 0x86
子字符串。
查看在线演示:
#!/bin/bash
s="<address DOMAIN='0x000' bus='PCOIP_USB0' slot='0x00' function '0x0' />
<address DOMAIN='0x000' bus='PCOIP_USB1' slot='0x00' function '0x0' />
<address DOMAIN='0x000' bus='PCOIP_USB7' slot='0x00' function '0x0' />
<address type='bmu' domain='0x000' bus='PCOIP_USB9' slot='0x00' function '0x0' />
<address DOMAIN='0x000' bus='PCOIP_USB4' slot='0x00' function '0x0' />"
sed "s/PCOIP_[^']*/0x86/g" <<< "$s"
输出:
<address DOMAIN='0x000' bus='0x86' slot='0x00' function '0x0' />
<address DOMAIN='0x000' bus='0x86' slot='0x00' function '0x0' />
<address DOMAIN='0x000' bus='0x86' slot='0x00' function '0x0' />
<address type='bmu' domain='0x000' bus='0x86' slot='0x00' function '0x0' />
<address DOMAIN='0x000' bus='0x86' slot='0x00' function '0x0' />