2010-07-24 191 views
-1

嗨我需要在file1.txt上运行'sed'命令并让它提取在StringA和StringB之间的所有名称......例如:“昵称”:“bad_name”,提取bad_name然后保存所有的结果也是Output.txt。这是甚至可能或者我应该看另一个命令?sed命令行

+0

什么是StringA和StringB?引号? – 2010-07-24 04:56:39

+0

在这个例子中是什么'StringA'和'StringB'。它总是在':'之后的单词,还是你真的在寻找一个不变的字符串? – Wolph 2010-07-24 04:57:15

+0

如果您可以发布几行样本输入和输出,我敢打赌有人可以提供帮助。目前尚不清楚你要求什么。 – 2010-07-24 04:59:48

回答

2

没有显示你的file1.txt的更多示例,我假设你有一致的数据格式。如果是的话,用awk

echo '"Nickname":"bad_name"' | awk -F":" '{print $NF}' 

对于一个文件,只需输入文件名

awk -F":" '{print $NF}' file > output.txt 

否则,提供更多的样本数据让我们一起工作。

1

使用的sed:

[email protected]:~$ cat file1 
"Nickname":"bad_name" 
"First Name":"Dmitry" 
bad line 
"Dog Name":"Chuppy" 
another bad line 

[email protected]:~$ cat file1 | sed -e '/\(.\+\)":"\(.\+\)"/!d' -e 's/"\(.\+\)":"\(.\+\)"/\2/' 
bad_name 
Dmitry 
Chuppy 

第一表达会删除格式错误的线,第二个替换第二组匹配的图案 - 的第二引号的内容。

+0

该文件中有其他用户信息,所以我必须隔离“昵称“:”(带引号)并提取bad_name,结尾字符串为“, ex:”昵称“:”bad_name“, 输出:bad_name :不能单独使用它来确定名称的起始位置只是因为它在其他数据中不是唯一的: – acctman 2010-07-24 06:54:21

+0

那么,在这种情况下,你需要将表达式的第一部分(第一个子模式)改为'“昵称”'。 因此,该命令将如下所示: 'cat file1 | sed -e'/"Nickname":"\\(.\+\\)"/!d'-e's /“昵称”:“\\(。\ + \\)”/ \ 1 /'' – dmedvinsky 2010-07-24 08:10:26

+0

我试过你列出的命令,它只显示文件内容。 sed命令没有运行或输出任何东西。 cat file1.txt | sed -e'/"Nickname":"\\(.\+\\)"/!d'-e's /“昵称”:“\\(。\ + \\)”/ \ 1 /' – acctman 2010-07-24 09:34:32