![](/img/trans.png)
[英]How to print a string before line N and delete specific string from line N using AWK or SED
[英]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.