如何刪除文字檔案中字元模式(包括模式)之後的所有內容(每一行)?

如何刪除文字檔案中字元模式(包括模式)之後的所有內容(每一行)?

基本上我需要這個問題的OP得到但不想要的東西。 如何刪除文件中特定模式或字串之後的所有內容?

所以我得到的數據如下:

Something and something ........................... 23
Another one .......................................123
Somethingelse Inc. .................................243

所以我想要的是刪除空格後的整堆點(和數字)。

到目前為止,我嘗試在那裡使用OP的命令,但它並沒有像我預期的那樣工作,因為它會刪除我遇到的第一個點之後的所有內容。這意味著 Somethinelse Inc. 類別資料上的點也被刪除。

我試圖通過用三個點替換第一個 .com 並將第二個 .com 替換為空格來使該問題的第一個(sed)答案起作用,但我失敗了。這次刪除第一個空格或留下三個點之後的所有內容。

第二個答案(ex -sc ...)就像OP想要的那樣,但它給我留下了一些點,所以我也沒有運氣。

我還嘗試根據此答案調整命令,但也失敗了。如何從一行中刪除一個模式之前的所有內容以及另一個模式之後的所有內容?

答案1

sed 's/ \.\..*$//' /path/to/file應該管用:

 \.\. - A space followed by two literal periods
.*    - One or characters of any type
$     - End of line 

答案2

另一個但不優雅的解決方案可能是:

cat path/to/yourfile | sed -E "s/[\.]{2,}//g" | sed "s/[0-9]//g" > path/to/new_file

在哪裡:

  • -E將正規表示式解釋為擴展(現代)正規表示式
  • [\.]{2,}每出現兩次或多次匹配一個點
  • [0-9]匹配所有數字

  • s/expr//g表示expr盡可能不符合任何內容的替代品 (g)

答案3

這個怎麼樣:

sed 's/\.\+ *[[:digit:]]\+[[:space:]]*$//g'

意思是:

一對+多(\+)(\.)並且零到多(*)空間( )以及一對多(\+) 數位([[:數字:]])並且以防萬一(*) 空白 ([[:空間:]])AND 本行末尾 ($)

測試(請注意,我在第二行插入了“...234”,並在尾隨製表符/空格):

Something and something ........................... 23<Tab>
An ...234 other one .......................................123<space>
Somethingelse Inc. .................................243<some spaces>

結果:

xb@dnxb:/tmp$ sed 's/\.\+ *[[:digit:]]\+[[:space:]]*$//g' sample.txt
Something and something 
An ...234 other one 
Somethingelse Inc. 
xb@dnxb:/tmp$ 

相關內容