用字符串替换特性键中的值
Posted
技术标签:
【中文标题】用字符串替换特性键中的值【英文标题】:Replace values in a specificities key with a string 【发布时间】:2020-06-08 00:44:26 【问题描述】:我有一个文本文件,其中一些行的格式为:
some text key1="value1" key2="value2",text_to_copy_1
some text
some text key1="value3" key2="value4",text_to_copy_2
some text
...
我希望用 text_to_copy_X 替换 key1 中的值。 所以,我可以得到类似的东西:
some text key1="text_to_copy_1" key2="value2",text_to_copy_1
some text
some text key1="text_to_copy_2" key2="value4",text_to_copy_2
some text
...
如何在 bash(首选)或 python 中处理此文件? 信息: text_to_copy_X 以我不想考虑的最终空白结尾。谢谢
【问题讨论】:
text_to_copy end 在哪里 - 总是在行尾? wrtthat I do not want to consider
- 这绝不是一种选择,您必须考虑是否将其作为替换文本的一部分。我猜你的意思是that I do not want to be part of the text that I copy into key1="..."
。
【参考方案1】:
awk -F'"' '$2!="" print $1 "\042" substr($5,2) "\042" $3 "\042" $4 "\042" $5
$2=="" print' <(sed 's| *$||' input)
首先sed
会从您的input
文件中删除所有尾随空格,因为您不想考虑它们。
然后 awk 继续执行该结果,使用 "
作为分隔符。
【讨论】:
我看到我有一些带有 3 个键的行和其他带有 2 个键的行,并且带有 3 个键的 sed 命令不起作用。是否可以将其更新为具有可变数量的键?例如一行是:some text key1="value1" key2="text_to_copy_2" key3="value4",text_to_copy_2 @Giacota 您应该为此打开一个新问题。另外,看看当有人回答你的问题时该怎么做***.com/help/someone-answers>。 明白。 Tnx【参考方案2】:使用带有 -E
标志的 sed 来使用 ERE(例如 GNU sed 或 OSX/BSD sed):
$ sed -E 's/(key1=")[^"]*(".*,(.*[^[:space:]]))/\1\3\2/' file
some text key1="text_to_copy_1" key2="value2",text_to_copy_1
some text
some text key1="text_to_copy_2" key2="value4",text_to_copy_2
some text
【讨论】:
【参考方案3】:您可以通过sed
实现此目的
➜ ~ cat text
some text
some text key1="value3" key2="value4",text_to_copy_2
some text key1="value3" key2="value4",text_to_copy_2
some text key1="value3" key2="value4",text_to_copy_2
some text key1="value3" key2="value4",text_to_copy_2
some text
$> sed -E "s/key1=\"[^ ]+\"(.+),(.+)((\ )$)?/key=\"\2\"\1,\2/" text
some text
some text key="text_to_copy_2" key2="value4",text_to_copy_2
some text key="text_to_copy_23" key2="value4",text_to_copy_23
some text key="text_to_copy_4" key2="value4",text_to_copy_4
some text key="text_to_copy_2" key2="value4",text_to_copy_2
some text
【讨论】:
几乎完成了,只是一件小事,因为一些“text_to_copy_X”(不是全部)有一个我不想复制的结尾空白。键值内。我怎样才能避免这种情况?目前结果类似于: some text key="text_to_copy_2 " key2="value4",text_to_copy_2 更新了正则表达式以排除空格 我刚刚注意到的小问题。一些“text_to copy_X”内部有一个空格,并且在您最后一次修改时,这只是第一部分。例如,我得到“text_to”而不是“text_to copy_X”。你能更新正则表达式来支持这个吗?谢谢 更新了正则表达式以上是关于用字符串替换特性键中的值的主要内容,如果未能解决你的问题,请参考以下文章