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/正規表現/置換/

regexp をパターン スペースと一致させようとします。成功した場合、一致した部分を置換で置換します。置換には、一致したパターン スペースの部分を参照するための特殊文字&と、正規表現内の対応する一致する部分式を参照するための \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("アルンスベルク");
townValue.put("アシャッフェンブルク");
townValue.put("アウグスブルク");

$ awk -f スクリプト ファイル
townValue.put("アーヘン", "アーヘン");
townValue.put("アーレン", "アーレン");
townValue.put("アーレン", "アーレン");
townValue.put("アルンスベルク", "アルンスベルク");
townValue.put("アシャッフェンブルク", "アシャッフェンブルク");
townValue.put("アウクスブルク", "アウクスブルク");
于 2013-07-26T08:04:42.497 に答える