2010-07-24 239 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