0

我有一个包含许多行的文件,如下所示:

townValue.put("Aachen");    
townValue.put("Aalen");             
townValue.put("Ahlen");             
townValue.put("Arnsberg");          
townValue.put("Aschaffenburg");         
townValue.put("Augsburg");

我想将此行更改为:

townValue.put("Aalen", "Aalen");            
townValue.put("Ahlen", "Ahlen");            
townValue.put("Arnsberg", "Arnsberg");          
townValue.put("Aschaffenburg", "Aschaffenburg");        
townValue.put("Augsburg", "Augsburg");

如何使用 sed 或 awk 实现这一点。这似乎是一个特殊的查找和替换任务,我在网上还找不到。

谢谢您的帮助

4

2 回答 2

6

使用sed -e 's/"[^"]*"/&, &/'

$ cat 1
townValue.put("Aachen");    
townValue.put("Aalen");             
townValue.put("Ahlen");             
townValue.put("Arnsberg");          
townValue.put("Aschaffenburg");         
townValue.put("Augsburg");
$ sed -e 's/"[^"]*"/&, &/' 1
townValue.put("Aachen", "Aachen");    
townValue.put("Aalen", "Aalen");             
townValue.put("Ahlen", "Ahlen");             
townValue.put("Arnsberg", "Arnsberg");          
townValue.put("Aschaffenburg", "Aschaffenburg");         
townValue.put("Augsburg", "Augsburg");

根据 sed(1):

s/正则表达式/替换/

尝试将正则表达式与模式空间进行匹配。如果成功,则替换与替换匹配的部分。替换可能包含特殊字符&来引用匹配的模式空间部分,特殊转义符 \1 到 \9 来引用正则表达式中相应的匹配子表达式。

于 2013-07-26T07:35:20.813 回答
1

的代码,由于命令行中有大量引号,我建议使用脚本:

awk -f script file
  • 脚本

    BEGIN {FS=OFS="\""}
    $3=", \""$2"\""$3
    

$猫文件
townValue.put("亚琛");
townValue.put("阿伦");
townValue.put("阿伦");
townValue.put("Arnsberg");
townValue.put("阿沙芬堡");
townValue.put("奥格斯堡");

$ awk -f 脚本文件
townValue.put("亚琛", "亚琛");
townValue.put("阿伦", "阿伦");
townValue.put("阿伦", "阿伦");
townValue.put("Arnsberg", "Arnsberg");
townValue.put("阿沙芬堡", "阿沙芬堡");
townValue.put("奥格斯堡", "奥格斯堡");
于 2013-07-26T08:04:42.497 回答