2013-03-12 148 views
0

我想刪除一個文件,看起來像這樣一行:問題與山獅sed

測試1800在CNAME mydomain.com。

我在Mountain Lion上使用sed,我嘗試了以下方法,但是我一直沒有收到任何錯誤,但是行並未被刪除。

sed -i -e '/$regex/d' $file 

sed -i "" -e '/$regex/d' $file 

凡$正則表達式是包含行提及上方和$文件表達式是其中線是該文件的名稱。

任何幫助將不勝感激。

+0

的可能重複[sed的就地標誌,在Mac和Linux上都可以](http://stackoverflow.com/questions/5694228/sed-in-place-flag-that-works-both-on-mac-and-linux) – ismail 2013-03-12 20:21:07

+0

查看鏈接的帖子, -i不適用於BSD sed(OSX使用)。 – ismail 2013-03-12 20:21:35

+0

Lion和Mountain Lion上的BSD'sed'有'-i'選項。 – 2013-04-17 04:03:48

回答

0

這是Sed command find and replace in file ...近重複,最便攜的答案是一樣的有:

sed -e '/$regex/d' $file >$file.tmp && mv $file.tmp $file 

...的原因,並與優勢,因爲在那裏。當你擔心可移植性時,POSIX spec是一個很好的資源,因爲它描述了unix命令的一個常見子集,它通常受到了令人沮喪的限制,但是它非常可靠地存在於所有可能遇到的unix中。

0

山獅(v10.8.2)的作品只是sed -i "" -e '/$regex/d' $file

[Mar 12 17:22] [[email protected] ~]$ more test.php 
<?php 
echo "Test php echo 1"; 
echo "Test echo 2"; 
?> 
[Mar 12 17:22] [[email protected] ~]$ sed -i "" -e "/php/d" test.php 
[Mar 12 17:22] [[email protected] ~]$ more test.php 
echo "Test echo 2"; 
?> 
0

最有可能的問題很好,在我看來,是你有一個包含了模式的shell變量$regex要搜索和已刪除,但您的單引號會阻止shell擴展它。您可能需要使用:(對獅子和山獅BSD sed支持-i選項的手冊頁建議不要長度爲零的備份擴展。)

sed -i .bak -e "/$regex/d" $file 

-i extension

就地編輯文件,使用指定的擴展名保存備份。如果給出零長度擴展 ,則不會保存備份。不建議給予零長度延伸時 就地編輯文件,否則可能損壞或情況部分內容,其中磁盤 空間耗盡等