2014-10-17 107 views
2

我遇到了一些我自己無法解決的奇怪問題。我有兩個文件,內容如下:Shell腳本 - 無法使用grep在文件中找到字符串

FILE1.TXT

Butterscotch;lkt+4S7Yhzf/g 
Sox;WrWMzN6HD 
Table;K4yPIK+SFfTFs 
tram;YaY3opP9ie 
number;e/WwiF5aihUY 
Buttler;Nsadlkt+4S7Yhz 
wzahwahwah;PYaY3opP9ieH 

FILE2.TXT

Butterscotch;lkt+4S7Yhzf/g 
Sox;WrWMzN6HD 
Table;K4yPIK+SFfTFs 
tram;YaY3opP9ie 
number;e/WwiF5aihUY 

我需要找到這兩個文件,但之間的差異只對於分號前的條目,所以我首先使用awk來獲得這些條目:

awk 'BEGIN {FS=";"}; {print $1}' File1.txt > Output1.txt 
awk 'BEGIN {FS=";"}; {print $1}' File2.txt > Output2.txt 

新文件包含的條目如下:

Output1.txt

Butterscotch 
Sox 
Table 
tram 
number 
Buttler 
wzahwahwah 

Output2.txt

Butterscotch 
Sox 
Table 
tram 
number 

然後我用grep -Fxvf Output2.txt Output1.txt > Diff.txt打印出來之間的差異Output2.txt和Output1.txt,所以我的文件看起來像這樣:

Diff.txt

Buttler 
wzahwahwah 

現在棘手的問題。我需要找到並打印出File1.txt的另一個文件整行,其起始條目從Diff.txt。我聲明瞭一個變量,做這樣的事情:

variable=$(cat Diff.txt) 
grep $variable Output1.txt > Delete.txt 

所以在這個例子中,我應該得到的東西是這樣的:

Delete.txt

Buttler;Nsadlkt+4S7Yhz 
wzahwahwah;PYaY3opP9ieH 

但不幸的是,我得到一個錯誤:

grep: wzahwahwah: No such file or directory 

文件Delete.txt,而不是期望的數據包含:

/home/working/File1.txt:Buttler;Nsadlkt+4S7Yhz 

所以這遠不是我需要得到。我已經注意到的是,當我從FILE1.TXT

wzahwahwah;PYaY3opP9ieH 

刪除我沒有得到任何錯誤,我需要的文件看起來像:

Buttler;Nsadlkt+4S7Yhz 

爲什麼這是行不通的任何想法?

回答

4

而不是你cat和隨後grep利用這個grep

grep -Ff Diff.txt File1.txt 
Buttler;Nsadlkt+4S7Yhz 
wzahwahwah;PYaY3opP9ieH 
+0

很棒!謝謝。任何想法,爲什麼我的grep沒有工作? – NRG 2014-10-17 07:52:29

+0

我相信問題是讀取變量中的文件內容,然後使用該變量未加引號。 – anubhava 2014-10-17 08:01:49

+1

現在唯一困擾我的是爲什麼'grep'爲其他條目工作,但對wzahwahwah不起作用; PYaY3opP9ieH。儘管如此,再次 - 謝謝。 – NRG 2014-10-17 08:12:43

2

當你做到這一點

variable=$(cat Diff.txt) 
grep $variable Output1.txt > Delete.txt 

的變量被擴展之後,因爲它是不帶引號的grep命令變成

grep Buttler wzahwahwah Output1.txt > Delete.txt 

grep的只使用了第一個參數作爲模式,以下所有參數都是文件名。 Grep在Output1.txt中找到了「Buttler」,但未找到名爲「wzahwahwah」的文件

+0

謝謝你的解釋。我已經在上面提到的所有其他腳本中檢查了使用'grep'的地方,並且僅在包含一個變量的文件(例如,0或1來檢查腳本是否正在運行)上使用它。所以我做了錯誤的假設,這也會與其他變量:) – NRG 2014-10-17 11:52:44

相關問題