0

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

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

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

4

5 回答 5

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

NF 是字段数,awk 从 1 开始计数,因此倒数第二个字段是 NF-1。
-F。表示字段由“。”分隔。而不是空格

于 2011-12-17T20:04:25.333 回答
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
于 2011-12-17T20:23:35.937 回答
1

awkcut将是我完成此任务的主要工具,但由于已经提出,我将添加一个解决方案

cut -d. -f3

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

既然您用 标记了问题bash,我也将添加一个纯 bash 解决方案:

#!/usr/bin/bash 

IFS=.

while read -a LINE;
do
    echo ${LINE[2]}
done < file_name
于 2011-12-17T20:25:52.813 回答
0

尝试:

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

第一个sed命令说要删除一个点,然后删除所有内容,直到行尾为止;第二个说要删除所有内容,直到最后一个点。

于 2011-12-17T20:04:10.580 回答
0

这可能对您有用:

gconftool-2 -R / | sed -n 's/^active.*,\([^.]*\).*/\1/p'
于 2011-12-17T21:09:34.060 回答