2015-06-22 73 views
0

我知道如何使用模式匹配文本,但不知道如何操縱它們。使用Linux命令從文本中刪除一些行

我已經使用匹配並從文本文件中提取行,但我想從文本中刪除這些行。如何在不必編寫 shell腳本的情況下實現這一目標?

我在Google上搜索過,被推薦使用,但我對它不熟悉,不知道它是如何工作的。

任何人都可以指向正確的方向或幫助我實現這一目標嗎?

回答

2

grep-v選項反轉搜索,僅報告與模式不匹配的行。

既然您知道如何使用grep找到要刪除的行,使用grep -v和相同的模式會給你所有的行要保留。您可以將其寫入臨時文件,然後將臨時文件複製或移動到原始文件上。

grep -v pattern original.file > tmp.file 
mv tmp.file original.file 

您還可以使用sed,如圖shellfishanswer

有對grep解決多種可能的改進,但對於大多數人大部分時間,顯示什麼或多或少充足(這將是使用每個進程中間文件名是個好主意,最好用隨機名稱,如mktemp命令給你)。您可以添加代碼來刪除中斷中的中間文件;在回移時抑制中斷;如果原始文件具有多個硬鏈接或符號鏈接,則使用複製和移除而不是移動;等等。sed命令或多或少地爲您解決這些問題,但它不能識別多個硬鏈接或符號鏈接。

+0

當然,'grep -v',如此優雅的答案。應該有這個想法! – ShellFish

+0

我用'grep -v'實現了它。這很好。謝謝。 –

1

創建與使用的行匹配的模式。然後如下創建一個腳本:

sed -i '/pattern/d' file 

說明:

  • -i選項意味着覆蓋輸入文件,從而去除匹配pattern的文件。
  • pattern是您爲grep創建的模式,例如, ^a*b\+
  • d該sed命令代表刪除,它將刪除與該模式匹配的行。
  • file這是輸入文件,它可以由相對路徑或絕對路徑組成。

欲瞭解更多信息,請參閱man sed

+0

請注意,即使使用GNU'sed',sed'也不會將'+'識別爲正則表達式元字符。樣本模式匹配'b +','aab +',但不匹配'aaabc'。添加'-r'選項來啓用擴展正則表達式。 –

+0

當然,我很sl。。我剛剛從頭頂上給了一些隨機圖案。感謝您指出,雖然! – ShellFish

相關問題