簡體   English   中英

如何使用 sed 或 awk 在特定位置刪除包含特定字符串的行?

[英]How do I delete a line that contains a specific string at a specific location using sed or awk?

我想查找並刪除在特定位置具有特定字符串、特定長度的所有行。

我的數據集中的一行看起來像這樣:

STRING   1234567 1234567 7654321 6543217 5432176

筆記:

  • 條目的字段寬度為 8

  • 標識號可以在同一行重復

  • 識別號可以在不同的行上重復,但在不同的位置 - 這些行不應被刪除

在這個例子中,我想找到位於第 17 列並跨越到第 24 列(即第三個字段)的包含“1234567”的行並刪除它們。 我怎樣才能用 sed 或 awk 做到這一點?

我使用了以下內容,但它刪除了我想保留的行:

sed -i '/1234567/d' ./file_name.dat

干杯!

您可以使用

sed -i '/^.\{17\}1234567/d' ./file_name.dat

細節

  • ^ - 一行的開始
  • .{17} - 任意 17 個字符
  • 1234567 - 一個子字符串。

請參閱在線sed演示

s="STRING   1234567 1234567 7654321 6543217 5432176
STRING   1234567 5534567 7654321 6543217 5432176"
sed '/^.\{17\}1234567/d' <<< "$s"
# => STRING   1234567 5534567 7654321 6543217 5432176

使用awk ,打印除子字符串匹配之外的行。

$ awk 'substr($0,17,7)=="1234567"{next}1' file > output_file

或者逆邏輯更容易

$ awk 'substr($0,17,7)!="1234567"' file > output_file

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM