Python 用字符串替换特定项中的值

Python 用字符串替换特定项中的值,python,bash,awk,sed,command-line,Python,Bash,Awk,Sed,Command Line,我有一个文本文件,其中一些行的格式如下: some text key1="value1" key2="value2",text_to_copy_1 some text some text key1="value3" key2="value4",text_to_copy_2 some text ... 我希望用文本_to_copy_X替换键1中的值。 因此,我可以得到如下结果: some text key1="text_to_copy_1" key2="value2",text_to_copy

我有一个文本文件,其中一些行的格式如下:

some text key1="value1" key2="value2",text_to_copy_1 
some text
some text key1="value3" key2="value4",text_to_copy_2
some text
...
我希望用文本_to_copy_X替换键1中的值。 因此,我可以得到如下结果:

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处理此文件?
信息:ThutixToActhopyx以一个我不想考虑的最终空白结束。谢谢

您可以使用
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
awk-F''''''$2!='{print$1'\042“substr($5,2)”\042“$3”\042“$4”\042“$5}

$2==''{print}',具有
-E
标志的sed使用ERE(例如GNU sed或OSX/BSD sed):


TrimthtoToAc拷贝到底在哪里结束?总是在WRT <代码>我不想考虑< /COD>——这不是一个选项,你必须考虑是否把它作为替换文本的一部分。我想你是指<代码>,我不想成为我复制到KEY1=……的文本的一部分……“
。差不多完成了,这只是一件小事,因为某些“文本复制”(并非全部)有一个我不想复制的结尾空白。在键值内。我怎样才能避免这种情况?目前的结果类似于:一些text key=“text\u to\u copy\u 2”key2=“value4”,text\u to\u copy\u 2更新了正则表达式以排除我刚才注意到的空白小问题。一些“要复制的文本”的内部有一个空白,在您上次修改后,仅取第一部分。例如,我得到的是“text_to”而不是“text_to copy_X”。你能更新正则表达式来支持这一点吗?ThanksUpdated的regexI看到我有一些3键行,另一些2键行,而sed命令3键不起作用。是否可以将其更新为具有可变数量的键?例如,一行是:some text key1=“value1”key2=“text\u to\u copy\u 2”key3=“value4”,text\u to\u copy_2@Giacota你应该为此提出一个新问题。还有,看看当有人回答你的问题时该怎么办。明白了。Tnx
$>   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
awk -F'"' '$2!="" {print $1 "\042" substr($5,2) "\042" $3 "\042" $4 "\042" $5}
           $2=="" {print}' <(sed 's| *$||' input)
$ 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