繁体   English   中英

如何删除BASH中的一行?

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

我有以下代码:

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

我如何删除第7行的liska的第一条记录? 也许用sed? 我有一个文件。

使用GNU sed:

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

输出:

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

简短的awk脚本是一种提供大量控制的方法:

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

就是说,如果您愿意的话,您也可以在本机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