Regex 将每行上的一个值替换为另一个值
给定以下从大得多的文件中提取的文本示例行:Regex 将每行上的一个值替换为另一个值,regex,string,sed,Regex,String,Sed,给定以下从大得多的文件中提取的文本示例行: <document id='3316200' srcDocId='http://ecx.images-amazon.com/images/I/61A9A0fmN7L.jpg'</document> <document id='3306829' srcDocId='http://ecx.images-amazon.com/images/I/71sQDUoJbmL.jpg'</document> <document
<document id='3316200' srcDocId='http://ecx.images-amazon.com/images/I/61A9A0fmN7L.jpg'</document>
<document id='3306829' srcDocId='http://ecx.images-amazon.com/images/I/71sQDUoJbmL.jpg'</document>
<document id='2406251' srcDocId='http://ecx.images-amazon.com/images/I/71j7ISxAOdL.jpg'</document>
<document id='2534144' srcDocId='http://ecx.images-amazon.com/images/I/71VXMXcrg2L.jpg'</document>
<document id='3417415' srcDocId='http://ecx.images-amazon.com/images/I/71Ymoo32gVL.jpg'</document>
如何以编程方式将srcDocId值替换为每行上的id值
我已经使用regex和sed的组合完成了这个任务,但我认为有一个更简单的解决方案,这就是我要问的。我做了以下工作:
使用regex将srcDocId替换为id:
Regex:id='.*?'srcDocId='.*'
正则表达式替换:$1$1
此正则表达式的示例可在此处找到:
获取regex replacement输出并运行sed将第二次出现的id=替换为srcDocId=:
Sed:Sed's/id=/srcDocId=/2'input.txt>output.txt您可以使用以下正则表达式替换来交换值:
id='(.*?)' srcDocId='(.*?)'
以id='$2'srcDocId='$1'作为替换
这里有一个sed中没有非贪婪量词
sed "s/id='\([^']*\)'[[:blank:]]\+srcDocId='[^']*'/id='\1' srcDocId='\1'/g" file
如果你想交换,那么试试这个
sed "s/id='\([^']*\)' srcDocId='\([^']*\)'/id='\2' srcDocId='\1'/g" file
非常感谢你的回答。工作完美。我将此标记为正确答案,因为它是最简单的。如果两个属性之间确实存在未知数量的空格,您可以使用id='.*?'+srcDocId='.'.'.'',或id='.'.'.'[[:blank:]]+srcDocId='.'.''?,替换为id='$3'$2srcDocId='$1'。谢谢您的回答。我试过了,效果很好。如果你是唯一的答案,我会把这个标记为正确的,但是因为你只能有一个答案标记为正确,你必须接受一次投票:@Stuart你在sed中试过另一个答案了吗?