2017-05-30 70 views
-1

我有一個文件,我需要使用sed來處理它。
命令在終端和腳本中有不同的操作

這是我的命令:sed -i -e '/.*tour\.html\|.*Thumb[^\/]*\.jpg/!d'

現在,如果我從終端執行此命令,例如,sed -i -e '/.*tour\.html\|.*Thumb[^\/]*\.jpg/!d' myfile.txt,它運行良好。但是,如果我用相同的命令編寫bash腳本,它將刪除所有行。

#!/bin/bash 

sed -i -e '/.*tour\.html\|.*Thumb[^\/]*\.jpg/!d' "$1" 

該腳本將刪除文件中的所有行。

我的電腦是Mac OS。

+0

在這兩種情況下顯示'sed --version'和'sed --help'(-i部分)的輸出。 – Yunnosch

+0

@Yunnosch我在終端執行'sed --version',我得到了一些信息,而我在腳本中編寫了'sed --version'並執行這個腳本,出現錯誤:'sed:illegal option - -' 。那意味着我有兩種'sed'? – Yves

+0

^^是的,你可能已經安裝了2份'sed'。根據你的'PATH'變量,'bash'在兩種情況下選擇不同的。在兩種情況下檢查'which sed'的輸出。 – anishsane

回答

0

據我所知,得到兩個sed實例的輸出sed --helpsed --version表明您實際上有兩個不同的sed版本對執行代碼的兩種不同方式做出反應。

sed在語法上有點不一致,特別是當涉及到命令行選項時。

例如,我知道-i交換機的一個重要區別,在某些Mac版本需要明確給出備份的文件擴展名。其他人可以選擇。這種差異可以解釋爲什麼涉及-i沒有備份擴展的某些事件在一種情況下工作而在另一種情況下失敗。

Anishsane建議不同的「PATH」變量反過來可以成爲執行兩個不同sed版本的機制的一部分。

我邀請OP來編輯--help--version(如果可能,應該有一種方法可以從兩個sed實例中獲取版本)的輸出到此答案中。實際上我沒有這些細節。這使得這個答案似乎有點「猜測」。