如何sed / grep文件名中的最后一个单词?

时间:2011-12-17 20:00:23

标签: bash sed grep busybox

我有几个不同语言的文件名。我需要grep或sed只是语言部分。我正在使用gconftool-2 -R /并希望通过管道命令来显示带有该语言的字母。

active = file.so,sv.xml
active = file.so,en_GB.xml
active = file.so,en_US.xml

我需要文件的sven_GB部分。我怎样才能以最有效的方式做到这一点?我想的是gconftool-2 -R / | sed -n -e '/active =/p̈́' -e '/\.$/'之类的东西,但后来我卡住了,因为我不知道如何打印我需要的部分而不是整行。

5 个答案:

答案 0 :(得分:5)

awk -F. '{print $(NF-1)}'

NF是字段数,awk从1开始计数,因此第2个到最后一个字段是NF-1 -F。说字段用“。”分隔。而不是空白

答案 1 :(得分:2)

如何使用简单的cut

cut -d. -f3 filename

<强>测试

[jaypal:~/Temp] cat filename
active = file.so.sv.xml
active = file.so.en_GB.xml
active = file.so.en_US.xml

[jaypal:~/Temp] cut -d. -f3 filename
sv
en_GB
en_US

根据更新的输入:

[jaypal:~/Temp] cat filename
active = file.so,sv.xml
active = file.so,en_GB.xml
active = file.so,en_US.xml

[jaypal:~/Temp] cut -d, -f2 filename | sed 's/\..*//g'
sv
en_GB
en_US

使用awk

[jaypal:~/Temp] awk -F[,.] '{print $3}' filename
sv
en_GB
en_US

[jaypal:~/Temp] awk -F[,.] '{print $(NF-1)}' filename
sv
en_GB
en_US

使用greptr

[jaypal:~/Temp] egrep -o ",\<.[^\.]*\>" f | tr -d ,
sv
en_GB
en_US

答案 2 :(得分:1)

awk将是我执行此任务的主要工具,但由于已经提出,我将使用cut添加解决方案

cut -d. -f3

即。使用.作为分隔符并选择第三个字段。

由于您使用bash标记了问题,我还会添加纯粹的bash解决方案:

#!/usr/bin/bash 

IFS=.

while read -a LINE;
do
    echo ${LINE[2]}
done < file_name

答案 3 :(得分:0)

尝试:

gconftool-2 -R / | grep '^active = ' | sed 's,\.[^.]\+$,,; s,.*\.,,'

第一个sed命令表示删除一个点,后跟一直不是一个点,直到行尾;第二个说要删除所有内容直到最后一个点。

答案 4 :(得分:0)

这可能对您有用:

gconftool-2 -R / | sed -n 's/^active.*,\([^.]*\).*/\1/p'