2008-10-01 110 views

回答

46
sed 's/a.*b/xyz/g;' old_file > new_file 

GNU sed(你可能有)更通用:

sed -r --in-place 's/a(.*)b/x\1y/g;' your_file 

下面是對這些選項的簡短說明:

-i [後綴] - 就地[=後綴] 編輯文件到位(如果擴展名提供,則備份)

-r,--regexp-extended 在腳本中使用擴展正則表達式。

FreeBSD版本也支持這些選項。 NetBSDOpenBSD版本僅支持-r

如果您想了解更多關於sed的信息,Cori建議使用this tutorial

+0

我不知道關於-r開關允許擴展正則表達式 - 方便!另外,-i是「就地」的快捷方式。 – 2008-10-01 02:17:12

+0

如果您想了解更多信息,請使用上面的cori鏈接。 sed比perl更輕量級afaik – MattSmith 2008-10-01 02:17:20

26

的Perl的發明此:

perl -pi -e 's/foo/bar/g;' *.txt 

任何正常的S ///模式在那些單引號。你可以保持一個備份的東西是這樣的:

perl -pi.bak -e 's/foo/bar/g;' *.txt 

或者管道:

cat file.txt | perl -ne 's/foo/bar/g;' | less 

但是,這真的更多的sed的工作。

5

sed,流編輯器,是的,它使用正則表達式。

6

將Ruby視爲Perl的替代品。它偷走了大多數Perl的一個班輪命令行ARGS(-i-p-l-e-n)和自動套$_你如Perl做,並有大量的正則表達式善良的。此外,Ruby的語法可能比Perl或sed更舒適,更容易閱讀或編寫。 (還是不行,這取決於你的口味。)

ruby -pi.bak -e '$_.gsub!(/foo|bar/){|x| x.upcase}' *.txt

perl -pi.bak -e 's/(foo|bar)/\U\1/g' *.txt

在當單行處理很多情況下,性能是不夠的問題的關心無論您是使用輕量級sed還是重量級的Perl或更重量級的Ruby。使用最簡單的方法編寫。

相關問題