2015-04-07 17 views
0

我試圖寫一個簡單的腳本,就會發現,如果在文件中的字段爲空,如 x_Field =「」腳本/斌/慶典增強過長和grep部分沒有工作找

find /mnt/sdb1/*/*/ -name 'files.txt' -type f -follow -print0 {} \; | xargs -0 grep -o -P '(?<=x_Field).*(?=y_Field)' | cut -c 3 | awk '{sub(/..$/,"")}1' 

我認爲這個命令沒有找到,但沒有找到?

grep -o -P '(?<=x_Field).*(?=y_Field)' | cut -c 3 | awk '{sub(/..$/,"")}1' 

此外,當我得到這個工作的一半,如果看來我有太多的文件進行掃描的過程中它太長了擴充:-(

對不起也添加進來,我需要經過數百子文件夾因此爲什麼我用通配符

+0

嘗試在'xargs'中添加'-n1'選項..' – anishsane

+4

'參數列表太長'來自'find/mnt/sdb1/*/*'的glob擴展。這是沒有必要的。只要'find/mnt/sdb1' –

回答

1

find命令有錯誤的數目。

顯然,/mnt/sdb1/*/*擴展到一個列表,它是你的shell太長了。您可以替換與/mnt/sdb1 -mindepth 2(assumin g你想避免在sdb1以下的目錄中找到任何東西)。

如果您有-exec選項,但您不知道{} \;會很有用。

此外,grep | cut | awk可能會被重構爲一個單一的Awk腳本,但如果沒有正確理解它應該完成什麼,很難寫出替代品。

+0

所以我想得到的輸出是「」那就是爲什麼我使用了cut | grep | awk修剪掉所有的位......字段內容的例子「x_Field」:「測試數據」,「y_Field」:「描述」 – Grimlockz

+0

那麼簡單地'grep'x_Field =「」''然後呢? – tripleee

+0

是的,但我理想情況下只想把它放到一個真正的循環,所以只顯示文件,你在這個領域的上下文,所以在掃描的2000個文件中,我只想知道文件的位置使用x_field – Grimlockz