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

时间:2018-11-14 16:15:22

标签: awk sed command

我想在特定位置查找并删除具有特定字符串,特定长度的所有行。

数据集中的一行看起来像这样:

STRING   1234567 1234567 7654321 6543217 5432176

注意:

  • 条目的字段宽度为8

  • 标识号可以在同一行中重复

  • 标识号可以在不同的行上重复,但可以在不同的位置重复-不应删除这些行

在此示例中,我想找到位于第17列并跨越到第24列(即第三个字段)的包含“ 1234567”的行并将其删除。我该如何使用sed或awk?

我使用了以下内容,但它删除了我要保留的行:

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

干杯!

2 个答案:

答案 0 :(得分:1)

您可以使用

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

详细信息

  • ^-一行的开头
  • .{17}-任意17个字符
  • 1234567-子字符串。

请参见online sed demo

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

答案 1 :(得分:0)

使用var LTLimit = from a in dbavailability.tACLicenseTypes where a.License_Type == "Long Term" select a.Limit; string AST = ""; ,打印除子串匹配以外的行。

awk

或者说逆逻辑更容易

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