我在文本文件中有一个巨大的位置列表:
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
答案 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
表示:
$_
设置为文件的第一行(由filename
提供)-e
代码$_
-p
实际在幕后做的事情最好用here解释。s/.*?,(.*?),.*/$1/
是一个正则表达式:
s/pattern/replacement/
在pattern
中查找$_
并将其替换为replacement
.*?
基本上意味着“任何事情”(它比这更复杂但超出了这个答案的范围),
是一个逗号(没什么特别的)()
捕获其中的内容并将其保存在$1
.*
是另一种(略有不同)“任何东西”(这次它更像是“一切”)$1
是我们使用()
$_
中搜索:
$_
。filename
是文本文件的名称要查看,代码将逐行浏览您的文件,应用正则表达式提取所需的位,然后将其打印出来。
如果您希望将结果存储在文件中,请使用:
perl -pe 's/^.*?,(.*?),.*/$1/' filename > out.txt
,结果进入一个名为out.txt的文件(将被放置在您的终端指向的任何位置。)这要做的是告诉终端将命令的结果打印到文件而不是打开屏幕。
此外,如果使用命令行并不重要,您只需导入Excel(它是CSV格式)并以图形方式处理它。
答案 3 :(得分:1)
使用awk
:
$ awk -F ',' '{ print $2 }' file