简体   繁体   English

如何删除BASH中的一行?

[英]How can I delete one row in BASH?

I have this code: 我有以下代码:

1441149726 jezevec Lukas
1441173967 tesak Petr
1441174056 kuna Marek
1441174063 myval Lukas
14411728 potter Marek
1441175214 hermiona Marek
1441219281 liska Marek
1441219282 liska Marek
1441219282 liska Marek
1441219283 liska Marek

How Can I delete first record with liska on 7th line? 我如何删除第7行的liska的第一条记录? Maybe with sed? 也许用sed? I have it in a file. 我有一个文件。

With GNU sed: 使用GNU sed:

sed '0,/liska/{/liska/d}' file

Output: 输出:

1441149726 jezevec Lukas
1441173967 tesak Petr
1441174056 kuna Marek
1441174063 myval Lukas
14411728 potter Marek
1441175214 hermiona Marek
1441219282 liska Marek
1441219282 liska Marek
1441219283 liska Marek

A short awk script is one approach that offers substantial control: 简短的awk脚本是一种提供大量控制的方法:

awk '
BEGIN { seen=0; }
{
  if(seen == 0 && $2 == "liska") {
    seen=1
  } else {
    print $0
  }
}
' <infile >outfile

That said, you could literally implement this in native bash, too, if you wanted: 就是说,如果您愿意的话,您也可以在本机bash中实现此功能:

#!/bin/bash

seen=0
while IFS= read -r line; do
  if ((seen == 0)) && [[ $line = *" liska *" ]]; then
    seen=1
  else
    printf '%s\n' "$line"
  fi
done <in.txt >out.txt
mv out.txt in.txt # if you want to replace the input file

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM