用命令行删除文本?

时间:2013-12-25 02:47:24

标签: perl shell command-line ssh command

我在文本文件中有一个巨大的位置列表:

ar,casa de piedra,Casa de Piedra,20,,-49.985133,-68.914673
gr,riziani,Ríziani,18,,39.5286111,20.35
mx,tenextepec,Tenextepec,30,,19.466667,-97.266667

有没有办法用命令行删除第一个和第二个逗号之间的所有内容?例如,我希望我的列表看起来像这样:

casa de piedra
riziani
tenextepec

4 个答案:

答案 0 :(得分:3)

使用Perl

perl -F/,/ -ane 'print $F[1]."\n"' file

答案 1 :(得分:2)

使用cut(1)

cut -d, -f2 inputfile

答案 2 :(得分:2)

使用perl:

perl -pe 's/^.*?,(.*?),.*/$1/' filename

以上代码的细分

  • perl - 使用perl编程语言的命令。
  • -pe - 旗帜。
    • e表示“将其作为perl代码运行”。
    • p表示:
      1. $_设置为文件的第一行(由filename提供)
      2. 运行-e代码
      3. 打印$_
      4. 从步骤1开始,使用文件的下一行
        • -p实际在幕后做的事情最好用here解释。
  • s/.*?,(.*?),.*/$1/是一个正则表达式:
    • s/pattern/replacement/pattern中查找$_并将其替换为replacement
    • .*?基本上意味着“任何事情”(它比这更复杂但超出了这个答案的范围)
    • ,是一个逗号(没什么特别的)
    • ()捕获其中的内容并将其保存在$1
    • .*是另一种(略有不同)“任何东西”(这次它更像是“一切”)
    • $1是我们使用()
    • 捕获的内容
    • 所以整个事情基本上都是在$_中搜索:
      1. 任何
      2. 逗号
      3. 任何事情(保存这一点)
      4. 另一个逗号
      5. 一切
    • 并将其替换为保存的位。这样可以有效地保存第一个和第二个逗号之间的内容,删除所有内容,然后将保存的内容放入$_
  • filename是文本文件的名称

要查看,代码将逐行浏览您的文件,应用正则表达式提取所需的位,然后将其打印出来。

如果您希望将结果存储在文件中,请使用:

perl -pe 's/^.*?,(.*?),.*/$1/' filename > out.txt

,结果进入一个名为out.txt的文件(将被放置在您的终端指向的任何位置。)这要做的是告诉终端将命令的结果打印到文件而不是打开屏幕。

此外,如果使用命令行并不重要,您只需导入Excel(它是CSV格式)并以图形方式处理它。

答案 3 :(得分:1)

使用awk

$ awk -F ',' '{ print $2 }' file