一次编辑所有行

Hug*_*ugo 1 text-manipulation macos

我有一个包含世界上几乎所有机场的 .txt 文件。每行是一个不同的机场,行的格式如下:城市,国家 - 机场名称(机场代码)

IE:

Le Mans, France - Arnage (LME)
Detroit, USA - Willow Run (YIP)
San Francisco, USA - San Francisco International (SFO)
Run Code Online (Sandbox Code Playgroud)

(完整的 .txt 在这里:http : //snipt.org/AnT8

但我想要这种格式:“城市,国家 - 机场名称(机场代码)”=>“机场代码”

(是的,带引号,用于 PHP 编码)

IE:

"Le Mans, France - Arnage (LME)" => "LME"
"Detroit, USA - Willow Run (YIP)" => "YIP"
"San Francisco, USA - San Francisco International (SFO)" => "SFO"
Run Code Online (Sandbox Code Playgroud)

我怎么能一次做到这一点?

ter*_*don 6

这些在 Linux、OSX 等上开箱即用:

  1. 珀尔

    perl -ne 'chomp; /\((.+?)\)/; print "\"$_\" => \"$1\"\n"' list.txt
    
    Run Code Online (Sandbox Code Playgroud)

    更多 Perl,这个使用魔法:

    perl -ane 'print "\"@F\" => \"$F[$#F]\"\n"' a
    
    Run Code Online (Sandbox Code Playgroud)
  2. 呆呆的/呆呆的

    awk -F '[()]' '{print "\""$0"\" =>\""$2"\""}' list.txt
    
    Run Code Online (Sandbox Code Playgroud)
  3. @evilsoup 的 sed

    sed  -e 's/(\(...\))/(\1)" => "\1"/' -e 's/^/"/' list.txt
    
    Run Code Online (Sandbox Code Playgroud)

这些都不会更改原始文件,-i用于 Perl 和sed选项或重定向输出(如果您想保存):

command list.txt > new_list.txt
Run Code Online (Sandbox Code Playgroud)

  • 在 OS X 上,如果您希望 `sed` 在不保存备份的情况下进行就地编辑,则语法略有不同:`sed -i '' ...`(使用 GNU sed,`''` 不会”不需要)。 (2认同)