给出以下示例文本行(从大文件中提取):
<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
值?
我使用正则表达式和 sed 的组合完成了这项任务,但我认为有一个更简单的解决方案,这就是我所要求的。我做了以下事情:
正则表达式:(id='.*?') (srcDocId='.*?')
正则表达式替换:$1 $1
此正则表达式的示例可在此处找到:https://regex101.com/r/fS2qT0/1
id=
的第二次替换为srcDocId=
: Sed:sed 's/id=/srcDocId=/2' input.txt > output.txt
答案 0 :(得分:2)
答案 1 :(得分:2)
sed中没有非贪婪的量词。
sed "s/id='\([^']*\)'[[:blank:]]\+srcDocId='[^']*'/id='\1' srcDocId='\1'/g" file
如果你想交换,那就试试吧,
sed "s/id='\([^']*\)' srcDocId='\([^']*\)'/id='\2' srcDocId='\1'/g" file