2013-01-05 96 views
0

我有一個包含lines.I列表的字符串。我想搜索任何特定的字符串並列出包含該字符串的所有路徑。 給定的字符串包含以下內容:在bash腳本中使用單詞匹配的列表路徑

755677 myfile/Edited-WAV-Files 
    756876 orignalfile/videofile 
    758224 orignalfile/audiofile 
    758224 orignalfile/photos 
    758225 others/video 
    758267 others/photo 
    758268 orignalfile/videofile1 
    758780 others/photo1 

我想提取和列表只從一部開拓創新的文件開始的路徑。我的輸出應該是這樣的:

756876 orignalfile/videofile 
758224 orignalfile/audiofile 
758224 orignalfile/photos 
758268 orignalfile/videofile1 
+0

P1通過發佈適用於該問題的[正確格式化](http://stackoverflow.com/editing-help)代碼,輕鬆改進您的問題。另外,請包含一份格式正確的**期望輸出樣本**,以便人們瞭解您嘗試實現的結果。 –

回答

1

這看起來很容易...

echo "$string" | grep originalfile/ 

grep originalfile/ << eof 
$string 
eof 

,或者如果它是在一個文件中,

grep originalfile/ sourcefile 
+1

或'grep originalfile/<<<「$ string」' –

+0

嗯,是的,問題*是*標記* bash *,但我仍嘗試堅持使用Posix sh。 – DigitalRoss

0

bash解決方案:

while read f1 f2 
do 
    [[ "$f2" =~ ^orignal ]] && echo $f1 $f2 
done < file 
+0

我不認爲這會匹配任何行,因爲它們都以數字開頭,沒有以「orignal」開頭。 –

+0

@PhilFrost,Guru只匹配第二個字段,而不是整行 –

0

如果字符串跨越幾行是這樣的:

755677 myfile/Edited-WAV-Files 
756876 orignalfile/videofile 
758224 orignalfile/audiofile 
758224 orignalfile/photos 
758225 others/video 
758267 others/photo 
758268 orignalfile/videofile1 
758780 others/photo1 

然後你可以使用此代碼:

echo "$(echo "$S" | grep -F ' orignalfile/')" 

如果該字符串不是由新線則

echo $S | grep -oE "[0-9]+ orignalfile/[^ ]+" 
分離
+0

它不是按行分隔的,我用這個命令grep -oE「[0-9] + ZR66。*」/ Users/backupuser/Desktop/test.rtf,但一些它沒有列出這個內容(755676 ZR66_op/Res-Edited-MP3文件)755676 ZR66_op/Res-Edited-MP3-Files 755677 ZR66_op/Res-Files 756876 ZR66_op/Res-已編輯的WAV文件 758228 ZR67_op/Res5.fcp 所有其他正在上市。你可以幫我嗎。 – user1941145

+0

嘗試'grep -oE「[0-9] + ZR66 [^] +」your_file' –

0
egrep '^[0-9]{6} orignalfile/' <<<"$string" 

備註:

  • ^匹配字符串的開頭。你不想匹配的東西,碰巧有orignalfile/中間的某個位置

  • [0-9]{6}六位數字在每行的開頭匹配

0

你確定你的字符串中包含換行/換行? 如果確實如此,那麼DigitalRoss的解決方案將適用。

如果它不包含換行符,那麼你必須包含它們。在舉例來說,如果你的代碼看起來像

string=$(ls -l) 

,那麼你必須用字段分隔字符串前面加上它不換行:

IFS=$'\t| ' string=$(ls -l) 

或空IFS VAR:

IFS='' string=$(ls -l) 

Google文檔IFS從bash手冊頁:

IFS The Internal Field Separator that is used for word splitting after 
     expansion and to split lines into words with the read builtin command. The 
     default value is ``<space><tab><newline>''.