假设我有这样的字符串:
xyz="123" ; acd="234" ; plk="1234" ; apl="3456" ; www="2342"
现在我想通过忽略和来替换plk="123"
为使用 sed 。plk="789"
;
""
输出:
xyz="123" ; acd="234" ; plk="789" ; apl="3456" ; www="2342
请帮我解决这个问题,并告诉我是否可以使用其他命令。
答案1
要替换plk="1234"
为plk="789"
,您可以执行以下操作:
$ sed 's/plk="1234"/plk="789"/g' file
xyz="123" ; acd="234" ; plk="789" ; apl="3456" ; www="2342"
但是,这也将替换notplk="1234"
为plk="789"
.为了避免这种情况,您可以使用\<
它只匹配单词边界:
$ sed 's/\<plk="1234"/plk="789"/g' file
xyz="123" ; acd="234" ; plk="789" ; apl="3456" ; www="2342"
我不确定它\<
是否 100% 便携,所以以防万一,你也可以这样做:
$ sed -E 's/(^| )plk="1234"/plk="789"/g' file
xyz="123" ; acd="234" ;plk="789" ; apl="3456" ; www="2342"
或者使用 Perl 代替:
$ perl -pe 's/\bplk="1234"/plk="789"/g' file
xyz="123" ; acd="234" ; plk="789" ; apl="3456" ; www="2342"
使用上述所有命令( 和sed
)perl
,您可以添加-i
标志以就地编辑原始文件。
上面的命令将替换全部plk="1234"
文件每一行中出现 的次数。您没有在问题中进行解释,但在标题中提到了“第 n 列”。我不知道你如何定义列或你的意思,但如果你的意思是你只想在第三个;
分隔列上进行此替换,你可以尝试这个(使用 GNU awk
):
$ awk -F';' 'BEGIN{OFS=";"}{$3=gensub(/plk="1234"/,"plk=\"789\"",1,$3); }1' file
xyz="123" ; acd="234" ; plk="789" ; apl="3456" ; www="2342"