一次编辑所有行


1

我有几乎所有机场的.txt文件。每条线路都是不同的机场,线路的格式如下:城市,国家 - 机场名称(机场代码)

即:

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

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

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

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

即:

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

我怎么能一下子这样做?


sed -i -e 's/(\(...\))/(\1)" => "\1"/ -e 's/^/"/' file.txt对于我来说,将其扩展为适当的答案并解释时已为时已晚,但如果有其他人愿意,他们应该感到自由。
Evilsoup 2013年

你用的是什么操作系统?
terdon 2013年

机场代码看起来像一个唯一的标识符,你确定你不需要“机场代码”=>“整行”吗?
AnonymousLurker 2013年

@terdon我用的是Mac。
Hugo

@AnonymousLurker很确定,我以后需要标识符。但是谢谢你的建议。:)
雨果

Answers:


5

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

  1. Perl的

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

    更多Perl,这个使用魔法:

    perl -ane 'print "\"@F\" => \"$F[$#F]\"\n"' a
    
  2. AWK / GAWK

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

    sed  -e 's/(\(...\))/(\1)" => "\1"/' -e 's/^/"/' list.txt
    

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

command list.txt > new_list.txt

2
在OS X上,如果要sed在不保存备份的情况下进行就地编辑,则语法略有不同:( sed -i '' ...使用GNU sed时,''不需要)。
戈登戴维森2013年

@GordonDavisson你的意思是-i导致sed不创建备份?在任何情况下,由于引用了我的(evilsoup's)sed命令,这一点没有实际意义吗?它将代替编辑OSX,如果你只需要添加-ised命令是什么?
terdon 2013年

不,该-i选项会触发就地编辑,并允许您为备份文件指定扩展名,例如sed -i.bkp ...。如果你想就地编辑,但希望备份,你指定一个空的扩展; 在-i ''双引号中是一个显式空字符串,告诉sed没有备份扩展,因此没有备份。请注意,这与引用sed表达式完全不同。
戈登戴维森2013年

1

您还可以使用具有多行编辑功能的图形文本编辑器,例如Sublime Text

  • 选择全部CmdA,然后打开行编辑模式ShiftCmdL
  • 转到行尾Cmd并在括号中复制机场代码。然后用引号括起该行,=>再次添加并粘贴代码。
  • Esc退出行编辑模式。

所以基本上,你可以像使用一行一样做同样的事情。


对我来说这是最简单的答案。谢谢!
Hugo


0

您可以将其复制粘贴到电子表格中......然后通过分隔符将行拆分为列...当列已被制作为“城市,国家 - 机场名称(机场代码)” ...简单添加另一列重复字符串:=>并将“ 机场代码 ”列复制到下一个..

这可能看起来像这样:

“城市,国家 - 机场名称(机场代码)”=>“机场代码”

只需将所有表格内容粘贴到记事本或Mac上的任何文本编辑器中......然后根据您的代码要求将TAB替换为SPACE或NOTHING。

你只需要像MS Excel这样的电子表格软件,以及像记事本这样的文本编辑器。我是一个Windows用户,所以不知道mac的软件...

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.