我想查找并删除在特定位置具有特定长度的特定字符串的所有行。
我的数据集中有一行看起来像这样:
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