2013-12-23 54 views
0
更換

我試圖使用的命令是我試圖用sed作爲grep的

sed -n 's/'$LASTNAME'/pgIw '$TEMP_FILE2'' < "$TEMP_FILE" 

我的目標是讓搜索TEMP_FILE在LASTNAME值,並編寫包含匹配的行,如果有的話,它到TEMP_FILE2。我不斷收到sed命令亂碼。上面的代碼將返回

sed: command garbled: s/smith/pgIw /tmp/tmp.aKaGFH 

任何幫助表示讚賞!我一直試圖弄清楚這幾個小時!這是假設在UNIX的Korn shell中完成的,我不能使用awk或python,這是作業的規定。

謝謝!

+0

的指揮手段替換。格雷格Hewgill的答案清除了這一點。 –

回答

2

它看起來像你有大量的報價,你不需要。嘗試:

sed -n "/$LASTNAME/p" >$TEMP_FILE2 <$TEMP_FILE 

而且,你的s sed命令的使用似乎是不合時宜的,因爲你實際上並不想取代任何東西。

+0

謝謝。我可以在最後使用g和I標誌來至少搜索全局文件並使搜索大小寫不敏感嗎? – Airforcefalco

+0

此外,當我將其更改爲後僅跑了: SED -n 「/ $ LASTNAME/PGI」> $ TEMP_FILE2 <$ TEMP_FILE 它回來了 sed的:命令亂碼:/史密斯/ PGI – Airforcefalco

+0

編輯您的問題顯示您使用LASTNAME的價值。 'g'可能是你的問題,因爲它只適用於全局(每行匹配)替換。想一想,'s/x/y /'只會用1'y'代替1'x',而's/x/y/g'將會爲'x'的每個實例代替'y'當前與搜索目標匹配的行,即'x'。祝你好運。 – shellter

1

如果你只是想找到的東西和管道輸出,那麼只需使用grep

grep -i "$LASTNAME" "$TEMP_FILE" > "$TEMP_FILE2" # -i case-insensitive 

或Perl

perl -ne "print if /$LAST_NAME/" "$TEMP_FILE" > "$TEMP_FILE2" 
+0

我也不能使用perl。我試圖讓搜索案例不敏感。 – Airforcefalco

+0

從grep中使用-i選項 – brianadams

+0

剛剛嘗試過,但它告訴我它無法打開我認爲之前發生的TEMP_FILE。 – Airforcefalco